Hallo,
Ich versuche mich gerade an einem globalen Hook. Bin jetzt allerdings etwas verwirrt.
Habe eine
DLL mit der Callback-Funktion für den Hook, die von der
DLL auch exportiert wird.
Mein erster Versuch war nun folgender. Ich rufe in meiner Anwendung auf:
Delphi-Quellcode:
// FDLLInst = hInstance von DLL (über LoadLibrary erhalten)
// FDLLHookProc = Zeiger auf die Callback-Funktion (über GetProcAddress erhalten)
FHook := SetWindowsHookEx(WH_GETMESSAGE,FDLLHookProc,FDLLInst,0);
Das scheint auch prinzipiell zu funktionieren. Die
DLL wird nun von jedem Prozess geladen und die Callback-Funktion wird ausgeführt.
Wenn ich jetzt den Hook aus dem Hauptprogramm raus deinstallieren will:
Delphi-Quellcode:
if FHook <> 0 then
UnHookWindowsHookEx(FHook);
dann fängt Windows ziemlich an zu taumeln und letztendlich verabschiedet sich der Window-Manager.
Habe jetzt rausgefunden, dass ich wohl scheinbar (?) SetWindowsHookEx und UnHookWindowsHookEx in jedem Prozess (also in der
DLL) aufrufen muss. Dazu exportiert die
DLL in den von mir gelesenen Tutorials Funktionen (InstallHook, UnInstallHook).
Aber wie funktioniert das denn dann?
Ich lade die
DLL mit meinem Programm und rufe InstallHook auf. Die
DLL ruft nun SetWindowsHookEx auf. Aber habe ich dann nicht nur einen lokalen Hook in meinem Prozess? Wie installieren jetzt die anderen Prozesse den Hook?
Also da fehlt mir irgendwie noch ein Stück Verständnis
Kann mich da vllt. kurz jemand aufklären?
Gruß
Neutral General