Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Windowstate eines fremden Programm ermitteln (https://www.delphipraxis.net/135436-windowstate-eines-fremden-programm-ermitteln.html)

Aljoscha 10. Jun 2009 19:18


Windowstate eines fremden Programm ermitteln
 
Hallo!
Ich würde gerne den Windowstate eines fremden Programms ermitteln, also ob es minimiert ist, maximiert oder in meinem fall genauer: unsichtbar.
In einem meiner letzten Threats habe ich schon gefragt wie genau ich Firefox starten kann und das Handle ermittle, das habe ich jetzt soweit hingekriegt (danke nochmal ;-) http://www.delphipraxis.net/internal...t.php?t=159303 ).
Allerdings soll Firefox auch versteckt starten!
Dies ist allerdings leider nicht möglich (schein an Firefox zu liegen, habe in Autoit-Foren das selbe gelesen).
Deshalb möchte ich zumindest per Timer ermitteln ob das Fenster sichtbar oder unsichtbar ist und entsprechend darauf reagieren!
Falls jemand doch weiß wie man Firefox unsichtbar starten kann, wäre mir das natürlich noch lieber ;-)
So geht es schonmal nicht:

Delphi-Quellcode:
ShExecInfo.cbSize := sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask := SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.lpVerb := nil;
ShExecInfo.lpFile := PChar(GetDefaultBrowser);
ShExecInfo.lpDirectory := PChar(ExtractFilePath(GetDefaultBrowser));
ShExecInfo.lpParameters := PChar('-new-window ' + pageurl);
ShExecInfo.nShow := SW_HIDE;

ShellExecuteEx(@ShExecInfo);

SimStar001 10. Jun 2009 19:22

Re: Windowstate eines fremden Programm ermitteln
 
ich mache es so in meiner Anwendung:

Delphi-Quellcode:
function GetWindowState(WIndow : HWND): cardinal;
    wp: tWindowPlacement;
     Window : HWND;
begin
  result := - 1;
  if Window > 0 then
    begin
    wp.Length := SizeOf(tWindowPlacement); // muss sein für GetWindowsPlacement
    GetWindowPlacement(Window, @wp);
    result := wp.ShowCmd; // 
    end;
end;
PS: Du musst mal selber rumprobieren welcher Wert welcher State ist, ich weiß es auch nicht mehr genau!

LG Marco!

Aphton 10. Jun 2009 19:43

Re: Windowstate eines fremden Programm ermitteln
 
Probier mal folgendes:
Delphi-Quellcode:
const
  state: Array[Boolean] of String = ( 'Nein', 'Ja' );
var
  WL: Cardinal;
  Status: String;
begin
  WL := GetWindowLong( nh, GWL_STYLE ); // nh ist das Handle vom Notepad...
  Status := 'WS_VISIBLE: ' + state[(WL and WS_VISIBLE) = WS_VISIBLE] + #13#10 +
            'WS_MAXIMIZE: ' + state[(WL and WS_MAXIMIZE) = WS_MAXIMIZE] + #13#10 +
            'WS_MINIMIZE: ' + state[(WL and WS_MINIMIZE) = WS_MINIMIZE];
  Label1.Caption := Status;

Zacherl 10. Jun 2009 19:58

Re: Windowstate eines fremden Programm ermitteln
 
Über ShellExecuteEx geht auch das unsichtbar starten. Ich glaube man musste neben dem Show Parameter noch ein anderes Flag in der Struktur setzen, damit es funktioniert.

Aljoscha 10. Jun 2009 20:06

Re: Windowstate eines fremden Programm ermitteln
 
Sehr gut danke, der Code von Aphton ging schonmal :-)
Aber kann mir jemand sagen wie dieses zusätzliche Flag sein soll um Firefox direkt unsichtbar zu starten?
Das wäre natürlich eine viel sauberere Lösung...

Aphton 10. Jun 2009 20:16

Re: Windowstate eines fremden Programm ermitteln
 
--Sorry-- :oops:

wicht 10. Jun 2009 20:22

Re: Windowstate eines fremden Programm ermitteln
 
Genau das hat Aljoscha doch schon versucht :) siehe sein erstes Posting. Nichts für ungut.

Aphton 10. Jun 2009 20:29

Re: Windowstate eines fremden Programm ermitteln
 
ohh :oops:

Komisch :S
Tretet das Problem auch auf, wenn du das ganze nur mit ShellExecute aufrufst?

Edit1:
Also ich hab das mit ShellExecuteEx probiert und es hat prima funktioniert :gruebel:
Delphi-Quellcode:
var
  shellstruct: TShellExecuteInfo;
begin
  FillChar( shellstruct, sizeof(shellstruct), 0 );
  shellstruct.cbSize := Sizeof( shellstruct );
  shellstruct.lpVerb := 'open';
  shellstruct.lpFile := 'notepad';
  shellstruct.nShow := SW_SHOW;
  ShellExecuteEx( @ShelLStruct );

Aljoscha 10. Jun 2009 20:47

Re: Windowstate eines fremden Programm ermitteln
 
Also auch mit Shellexecute kann ich firefox.exe nicht unsichtbar starten... :(
Das Fenster unsichtbar zu machen ist kein Problem, aber unsichtbar starten geht scheinbar nicht.
Zumindest nicht so wie ich es versucht habe ;-)

Fridolin Walther 10. Jun 2009 21:14

Re: Windowstate eines fremden Programm ermitteln
 
Nur so als kleine Info:
Wenn Du Browser unsichtbar starten willst, stell Dich auf lustige Alarmmeldungen diverser Behaviour Blocker oder HIPS ein. Es gibt keinen rationalen Grund wieso man den Browser unsichtbar starten möchte, ausser eben an Firewall und Co vorbei Daten auszutauschen. Entsprechend wird es als malwaretypisches Verhalten erkannt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:28 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz