Delphi-PRAXiS

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.

Aljoscha 10. Jun 2009 21:20

Re: Windowstate eines fremden Programm ermitteln
 
Doch den gibt es, weil Indy kein Javascript kann.
Und die AV Meldungen sind ja relativ egal, weil man sein fertiges Programm einfach zu den Herstellern senden kann und die es in eine art "Trusted Liste" aufnehmen.

wicht 10. Jun 2009 21:27

Re: Windowstate eines fremden Programm ermitteln
 
Zitat:

Doch den gibt es, weil Indy kein Javascript kann.
?! Jetzt bin ich erst richtig interessiert, was du vorhast :stupid:

Fridolin Walther 10. Jun 2009 21:30

Re: Windowstate eines fremden Programm ermitteln
 
Zitat:

Zitat von Aljoscha
Doch den gibt es, weil Indy kein Javascript kann.

Da gibt es hunderte einfachere Möglichkeiten, die zudem deutlich sauberer sind. Z.B. könntest Du Gecko einfach in Deine Anwendung einbinden oder halt den IE, falls Du keine Rendering Engine mit ausliefern willst. Beides ermöglicht Dir sogar deutlich einfacheren Zugriff auf alles was sich im Browser abspielt als die Schnittstellen zur Browserfernsteuerung es je könnten. Für SpiderMonkey (Firefoxs Javascript Engine) gabs ebenfalls Delphi Bindings (http://delphi.mozdev.org).

Zitat:

Zitat von Aljoscha
Und die AV Meldungen sind ja relativ egal, weil man sein fertiges Programm einfach zu den Herstellern senden kann und die es in eine art "Trusted Liste" aufnehmen.

HIPS sind Fehlalarme egal, wobei es sich bei Deiner Anwendung nicht mal um einen Fehlalarm handeln würde. Da existiert sowas wie eine Whitelist vom Hersteller nicht.

Aljoscha 11. Jun 2009 14:44

Re: Windowstate eines fremden Programm ermitteln
 
Das wusste ich nicht :-)
Dann gucke ich mir das mit Gecko mal an!

Fridolin Walther 11. Jun 2009 18:04

Re: Windowstate eines fremden Programm ermitteln
 
Zitat:

Zitat von Aljoscha
Das wusste ich nicht :-)
Dann gucke ich mir das mit Gecko mal an!

Als Anhangspunkte wie man das Mozilla ActiveX Control richtig installiert:
http://www.delphipraxis.net/internal...=295790#295790

Für weitere Informationen:
Hier im Forum suchenTMozillaBrowser

Ebenfalls sehr hübsch:
http://www.paranoia.clara.net/articl...th_delphi.html

Aljoscha 11. Jun 2009 18:55

Re: Windowstate eines fremden Programm ermitteln
 
Vielen Dank!
Das werde ich mir mal ansehen ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:10 Uhr.

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