![]() |
SetWindowsHookEx innerhalb der DLL selbst
Hallo zusammen
Ich würde gerne prüfen ob irgendwo eine bestimmte Tastenkombination gedrückt worden ist. Dazu habe ich versucht innerhalb einer DLL selbst, einen Hook zu setzen. Hier mein Code:
Delphi-Quellcode:
Dieser Code wird automatisch beim Laden der DLL ausgeführt. var MainHook : HHOOK; //... function KeyboardHook(Code: Integer; wParam : WPARAM; lParam : LPARAM): Longint; stdcall; begin MessageBox(HWND_DESKTOP,Pchar('Wir sind im Hook!'),'Message',MB_ICONINFORMATION); end; //.... MainHook := SetWindowsHookEx(WH_KEYBOARD, KeyboardHook, hinstance, 0); if MainHook = 0 then begin MessageBox(HWND_DESKTOP,Pchar('Fehlerhafter Hook!'),'Message',MB_ICONINFORMATION); end else begin MessageBox(HWND_DESKTOP,Pchar('Hook erfolgreich!'),'Message',MB_ICONINFORMATION); end; Ich bekomme auch die Meldung : Hook erfolgreich aber leider bekomme ich nie die Meldung: Wir sind im Hook! Es scheint so, als ob ich keinen echten Hook gesetzt hätte. Woran liegt das? Danke schonmal |
AW: SetWindowsHookEx innerhalb der DLL selbst
Geht es um einen KeyboardHook oder um einen Hook in einer DLL?
Für Mouse- und Keyboard-Hook wird keine DLL benötigt ;) |
AW: SetWindowsHookEx innerhalb der DLL selbst
Hallo Rufo
Es geht im grunde um einen KeyboardHook Aber ich möchte diesen KeyboradHook innerhalb einer DLL setzen. Damit meine ich, Das erstellen des Hooks soll innerhalb der DLL geschehen und die bearbeitende Hookfunktion soll sich ebenfalls in dieser DLL befinden... Also mein Programm ist sozusagen die DLL... Ich hoffe du verstehst was ich meine :) |
AW: SetWindowsHookEx innerhalb der DLL selbst
Ich kann wahrscheinlich nichts konstruktives beitragen, nur anmerken, dass ich die Routine nicht einfach so, sondern deren Adresse an
Delphi-Quellcode:
übergeben habe...
SetWindowsHookEx
Und es waren keine Keyboard-Events, sondern Lowlevel-Keyboard-Events (
Delphi-Quellcode:
statt
WH_KEYBOARD_LL
Delphi-Quellcode:
)
WH_KEYBOARD
|
AW: SetWindowsHookEx innerhalb der DLL selbst
Zitat:
Das wollte ich auch schon versuchen... Aber dann kommt leider das:
Code:
[DCC Fehler] Project.dpr(42): E2003 Undefinierter Bezeichner: 'WH_KEYBOARD_LL'
|
AW: SetWindowsHookEx innerhalb der DLL selbst
Das hatte ich auf einem älteren Delphi (6?) auch, der kannte die Konstante einfach noch nicht.
Nimm stattdessen einfach die 13, wie du auf ![]() |
AW: SetWindowsHookEx innerhalb der DLL selbst
Zitat:
Leider bekomme ich nach einem Tastendruck in der Host-Anwendung immer noch keine Meldung meiner DLL
Delphi-Quellcode:
function KeyboardHook(Code: Integer; wParam : WPARAM; lParam : LPARAM): Longint; stdcall; begin MessageBox(HWND_DESKTOP,Pchar('Wir sind im Hook'),'Message',MB_ICONINFORMATION); end; //... MainHook := SetWindowsHookEx(13, KeyboardHook, hinstance, 0); |
AW: SetWindowsHookEx innerhalb der DLL selbst
Zitat:
|
AW: SetWindowsHookEx innerhalb der DLL selbst
Ok nun habe ich news....
Der hook schein doch so halbwegs zu klappen... Bei mir kommt einmalig die meldung: wir sind im hook. Direkt nach dem einklinken mit
Delphi-Quellcode:
Doch danach kann ich den Hook nicht mehr auslösen...
MainHook := SetWindowsHookEx(13, KeyboardHook, hinstance, 0);
Die frage ist nur, weshalb. Hier mein DLL-Code
Delphi-Quellcode:
Wird die DLL nach
begin
MainHook := SetWindowsHookEx(13, KeyboardHook, hinstance, 0); if MainHook = 0 then begin MessageBox(HWND_DESKTOP,Pchar('Fehlerhafter Hook!'),'Message',MB_ICONINFORMATION); end else begin MessageBox(HWND_DESKTOP,Pchar('Hook erfolgreich!'),'Message',MB_ICONINFORMATION); end; end.
Delphi-Quellcode:
irgendwie beendet und kann deshalb keine messages vom system mehr empfangen?
end.
|
AW: SetWindowsHookEx innerhalb der DLL selbst
Wenn ich die erste Meldung, dass der Hook erfolgreich erstellt wurde, nicht bestätige,
Dann funktionieren die Keyboardhooks. Sobald ich jedoch ok klicke. Funktioniert es nicht. Wird die DLL also irgendwie beendet? Wenn ja, wie kann ich die DLL in einem art IDLE Modus belasse, so dass die Hooks weiterhin funktionieren? Oder irgendwas wie StayAlive ? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:17 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 by Thomas Breitkreuz