KeyboardHook
-
Könnte mir mal einer sagen, wieso dieser Hook nicht funktioniert?
#include <stdio.h> #include <iostream> #include <windows.h> using namespace std; LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam) { if(code == HC_ACTION) { //MessageBeep(0xFFFFFFFF); MessageBox(NULL, "Hook aktiv\nDu hast eine Taste gedrückt", "Keyboard Hook Event",MB_OK); } return 0; } int main() { HHOOK Hook_ID = NULL; if(Hook_ID == NULL) { Hook_ID = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC) KeyboardProc, 0, GetCurrentThreadId()); if(Hook_ID != NULL) MessageBox(NULL,"Hook wurde gesetzt","Keyboard Hook Event",MB_OK); else MessageBox(NULL,"Hook wurde nicht gesetzt","Keyboard Hook Event",MB_OK); } int x; std::cin>>x; }Compiliert wurde mit VS2008 im 64Bit Mode unter Vista 64Bit.
Bekomme auch die Meldung zurück, dass der Hook registriert wurde aber er wird einfach nicht angesprungen. In diesem Fall ist mir erstmal völlig egal was für eine Taste gedrückt wird. Es soll einfach nur eine Message Box aufgehen wenn überhaupt eine Taste gedrückt wird. Eigentlich ist der Code fast 1:1 aus einem Buch abkopiert und trotzdem will das nicht so recht
-
Hab noch nie mit Einstellung 64-Bit compiliert, daher nur ein Tipp:
LRESULT CALLBACK KeyboardProc( int code, WPARAM wParam, LPARAM lParam)
Kann es sein daß bei 64-Bit Einstellung der int als 64-Bit Wert definiert ist und deshalb mit dem Wert HC_ACTION (welcher wahrscheinlich 32-Bit ist) nicht übereinstimmt?
Daher:
1. Compiliere mit 32-Bit Einstellung -> Ergebnis?
2. Den Typ int oder den Wert HC_ACTION casten.
3. Evtl. die oberen 32 Bits von int ausmaskieren.Martin