Entwickler-Ecke
Windows API - handel auf fremde anwendungen
farbdoc - Di 13.08.02 09:32
Titel: handel auf fremde anwendungen
Hi Leute.
Kann mir jemand erklären, wie ich ein handle auf eine andere anwendung bekomme (speziell deren fenster) und wie ich dann bestimmte messages an das porg schicken kann?
Ich möchte ein prog schreiben,
welches z.b. guckt ob ein fenster der notepad.exe existiert/offen ist,
sich ein handle auf das notepad fenster besorgt und dann das notepad fenster versteckt.
Wenn das notepad fenster schon versteckt ist, soll das prog die show message an notepad schicken, also es soll die sichtbarkeit toggeln...
Als denn... :D der farbdoc
toms - Di 13.08.02 10:22
Hi,
Mit FindWindow() kannst du nach einem Fenster suchen und
bekommst dann ein Handle darauf zurück.
IsWindowVisible() überprüft, ob ein Fenster sichtbar ist.
Mit ShowWindow() kannst du ein Fenster verstecken, anzeigen usw.
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.Button1Click(Sender: TObject); var wnd : HWND; begin // Notepad suchen wnd := FindWindow('notepad',nil); // überprüfen, ob Handle gültig ist if IsWindow(wnd) then // dann die sichtbarkeit toggeln ShowWindow(wnd, Ord(not IsWindowVisible(wnd))); end; |
tom
farbdoc - Di 13.08.02 10:56
Titel: funzt bestens!
alles klar tom!
danke - das WAR mein problem :lol: !
SpeedyGTD - Di 13.08.02 15:40
Bei mir funktioniert es auch ganz gut, bis auf Explorer, IExplorer, Rechner usw, wie geht es bei denen. :(
Mfg SpeedyGTD :D
DeCodeGuru - Di 13.08.02 16:42
Zum IExplorer: probiers mal mit IEFrame.
Delete - Di 13.08.02 16:56
Windows-Explorer = ExploreWClass
Einfach mal ein Programm benutzen, dass die Fenster (deren Titel und Klassen) auflistet. Kann man notfalls mit einer einfachen "EnumWindows"-Funktion selbst programmieren - wenn´s nicht noch unbedingt die Prozesse und Threads sein müssen.
SpeedyGTD - Mi 14.08.02 00:05
Vielen Dank @ DeCodeGuru das mit IEFrame ging wunderbar :D
Vielen Dank auch an MathiasS. das mit ExploreWClass ging leider nicht, aber könntest du mir vieleicht sagen, wo ich ein Prog finde was die Titel und Klassen auflistet, am besten auch eins das mir auch die Threads und Prozesse auflistet. :lol:
Delete - Mi 14.08.02 12:09
Also ein Fensterauflister ist schnell gemacht. Folgendes Beispiel demonstriert, wie -via Buttonklick- alle Hauptfenster, die sichtbar sind oder ein Systemmenü haben, minimiert werden:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| function CloseAll(Wnd: hWnd; lparam: LPARAM): longbool; stdcall; begin if((GetWindowLong(Wnd,GWL_STYLE) and (WS_VISIBLE or WS_SYSMENU)) = (WS_VISIBLE or WS_SYSMENU)) then PostMessage(Wnd,WM_SYSCOMMAND,lParam,0);
Result := true; end;
procedure TForm1.Button1Click(Sender: TObject); begin EnumWindows(@CloseAll,SC_MINIMIZE); end; |
Wer statt
SC_MINIMIZE mal
SC_CLOSE eingibt, kriegt auch offene Explorer zu. :wink:
So, wenn du dir jetzt mal die Funktion "CloseAll" anguckst, dann siehst du, dass dort eine HWND-Variable vorhanden ist. Wenn du die if-Abfrage und das
PostMessage weglässt könntest du z.B. mit
Quelltext
1: 2:
| GetClassName GetWindowText |
den Klassennamen und den Fenstertitel auslesen und an eine ListBox usw. weiterreichen. Achtung: Nicht jedes Fenster liefert einen Fenstertitel zurück.
Für Prozesse und Threads musst du andere Methoden benutzen. Da gibt´s aber einige Delphi-Demos. Musst einfach mal ´ne Suchmaschine wie Google bemühen, da sollte was zu finden sein.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!