![]() |
Mitkriegen wann eine andere Anwendung geschlossen wird?
Hallo!
Mein Programm soll mit kriegen, wann eine x-beliebige von mir festgelegte Anwendung geschlossen wird, weiß jemand wie ich das realisieren kann? Edit: Das einzige was mir/der Anwendung bekannt ist, ist ein Handle auf ein Fenster... falls es hilft ;) mfg phlux :hi: |
Re: Mitkriegen wann eine andere Anwendung geschlossen wird?
du könntest z. b. regelmäßig überprüfen ob das fenster noch da ist (FindWindow oder GetWindowText).
hierzu: ![]() ich glaube eine andere möglichkeit wäre einen hook auf die entsprechende anwendung zu setzen. damit kenne ich mich aber nicht aus. |
Re: Mitkriegen wann eine andere Anwendung geschlossen wird?
danke für den link, weiß zufällig jemand wie das mit dem hook geht? (möcht nicht zig timer laufen lassen, wobei sich da dann eh threads wohl eher eignen würden)
mfg phlux :hi: |
Re: Mitkriegen wann eine andere Anwendung geschlossen wird?
![]() ![]() Rein theoretisch sollte WM_CLOSE allein auch ausreichen. |
Re: Mitkriegen wann eine andere Anwendung geschlossen wird?
Ein WH_SHELL Hook sollte es auch koennen.
Globale Hooks (notwendigerweise in DLLs) sind allerdings kompliziert, da man den Hook-Handle so aufheben muss das er in allen Instanzen der DLL zugreifbar ist. Eine globale Variable in Delphi ist da nicht gut genug. |
Re: Mitkriegen wann eine andere Anwendung geschlossen wird?
Wie krieg ich denn dann die ThreadId raus die ich als letzten Parameter von SetWindowsHookEx() übergeben muss? Ich nehme an, dass es die "Id" von der Anwendung sein muss die ich hooken will oder?
|
Re: Mitkriegen wann eine andere Anwendung geschlossen wird?
Zitat:
![]() |
Re: Mitkriegen wann eine andere Anwendung geschlossen wird?
Gibt das nicht die ID der eigenen Anwendung zurück? :gruebel:
|
Re: Mitkriegen wann eine andere Anwendung geschlossen wird?
Zitat:
Zitat:
|
Re: Mitkriegen wann eine andere Anwendung geschlossen wird?
Zitat:
Zitat:
|
Re: Mitkriegen wann eine andere Anwendung geschlossen wird?
Das Schoene mit so einem Hook ist das er im Kontext/Adressraum der jeweiligen Applikation ausgefuehrt wird, also funktioniert GetModuleFileName(0, ...).
Von der Hook-DLL zu deiner Applikation uebermittelt man am bequemsten den Text mit WM_COPYDATA. Den Fensterhandle hat man beim Starten des Hooks mit uebergeben und er muss genauso wie der Hook-Handle aufgehoben werden. |
Re: Mitkriegen wann eine andere Anwendung geschlossen wird?
Zitat:
Zitat:
Robert hat doch schon einen guten Tip gegeben. Da der Hook jeweils im Kontext der Anwendung aufgerufen wird, kannst du bequem die API so aufrufen, als wärst du (du bist's ja) in dem Prozeß. Was will man mehr? Zitat:
![]() |
Re: Mitkriegen wann eine andere Anwendung geschlossen wird?
Ich habe seit Jahren einen globalen WH_SHELL-Hook am Laufen, der einer Tray-Applikation sagt welches Programm gerade im Vordergrund ist.
Entsprechend werden unterschiedliche Tastenbelegungen fuer ein Geraet benutzt. |
Re: Mitkriegen wann eine andere Anwendung geschlossen wird?
Zitat:
Delphi-Quellcode:
AppHWnd ist in diesem Fall das Fensterhandle der Fremdanwendung.
var
AppHWnd: HWND; ProcessId: DWORD; ProcessHandle: THandle; begin {...} if IsWindow(AppHWnd) then begin if GetWindowThreadProcessId(AppHWnd, @ProcessId) <> 0 then begin ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId); if ProcessHandle <> 0 then begin WaitForSingleObject(ProcessHandle, INFINITE); // Prozess wurde beendet CloseHandle(ProcessHandle); end; end; end; {...} end; |
Re: Mitkriegen wann eine andere Anwendung geschlossen wird?
Alles klar, danke. Jetzt habe ich genügend Informationen um mich alleine zurecht zu finden :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz