Hallo,
Ik probeer een (globale) keyboard hook te zetten in C++ zodat alle keystrokes opgevangen worden binnen mijn applicatie.
Dit probeer ik op de volgende manier te doen:
KeyboardHook.cc:
Aanroep:
Als test heb ik even de beep code en de cout code gedaan, dit wordt uiteraard vervangen. De callback functie wordt alleen helemaal niet aangeroepen.
Na het setten van de hook krijg ik netjes de handle terug van de ingestelde hook. De removeHook() functie werkt ook, en geeft netjes terug dat de hook is verwijderd.
Wat doe ik hier fout? De voorbeelden die ik op internet heb gevonden maken allemaal gebruik van een aparte DLL. Is het wel mogelijk om de hook in te stellen vanuit de app zelf?
Ik probeer een (globale) keyboard hook te zetten in C++ zodat alle keystrokes opgevangen worden binnen mijn applicatie.
Dit probeer ik op de volgende manier te doen:
KeyboardHook.cc:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| void KeyboardHook::installHook() { cout << "Installing hook" << endl; p_hook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, NULL, GetCurrentThreadId()); //p_hook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, NULL, GetCurrentThreadId()); } void KeyboardHook::removeHook() { if (UnhookWindowsHookEx(p_hook)) { cout << "Unhooked" << endl; } else { cout << "Could not unhook" << endl; } } LRESULT CALLBACK KeyboardHook::KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) { Beep( 750, 50 ); cout << "got keystroke" << endl << flush; // Pass info to next hook return CallNextHookEx(NULL, nCode, wParam, lParam ); } |
Aanroep:
C++:
1
2
3
| KeyboardHook * kbHook = new KeyboardHook(); kbHook->installHook(); //kbHook->removeHook(); |
Als test heb ik even de beep code en de cout code gedaan, dit wordt uiteraard vervangen. De callback functie wordt alleen helemaal niet aangeroepen.
Na het setten van de hook krijg ik netjes de handle terug van de ingestelde hook. De removeHook() functie werkt ook, en geeft netjes terug dat de hook is verwijderd.
Wat doe ik hier fout? De voorbeelden die ik op internet heb gevonden maken allemaal gebruik van een aparte DLL. Is het wel mogelijk om de hook in te stellen vanuit de app zelf?
...