Я создаю консольное приложение, в котором я хотел бы записывать нажатия клавиш (например, СТРЕЛКА ВВЕРХ). Я создал низкоуровневую клавиатуру, которая должна захватывать все нажатия клавиш в любом потоке и вызывать мою функцию обратного вызова, но она не работает. Программа немного останавливается, когда я нажимаю клавишу, но никогда не вызывает обратный вызов. Я проверил документацию, но ничего не нашел. Я не знаю, неправильно ли я использую SetWindowsHookEx () (насколько мне известно, он успешно создает ловушку) или моя функция обратного вызова неверна! Я не уверен, что не так! Заранее спасибо за помощь.
#include "Windows.h"
#include <iostream>
using namespace std;
HHOOK hookHandle;
LRESULT CALLBACK keyHandler(int nCode, WPARAM wParam, LPARAM lParam);
int _tmain(int argc, _TCHAR* argv[]) {
hookHandle = SetWindowsHookEx(WH_KEYBOARD_LL, keyHandler, NULL, 0);
if(hookHandle == NULL) {
cout << "ERROR CREATING HOOK: ";
cout << GetLastError() << endl;
getchar();
return 0;
}
MSG message;
while(GetMessage(&message, NULL, 0, 0) != 0) {
TranslateMessage( &message );
DispatchMessage( &message );
}
cout << "Press any key to quit...";
getchar();
UnhookWindowsHookEx(hookHandle);
return 0;
}
LRESULT CALLBACK keyHandler(int nCode, WPARAM wParam, LPARAM lParam) {
cout << "Hello!" << endl;
// Checks whether params contain action about keystroke
if(nCode == HC_ACTION) {
cout << ((KBDLLHOOKSTRUCT *) lParam)->vkCode << endl;
}
return CallNextHookEx(hookHandle, nCode,
wParam, lParam);
}