Я использую SetWindowsHookExA(WH_KEYBOARD_LL, HookCallback, GetModuleHandleA(NULL), 0);
, чтобы установить глобальный хук для захвата нажатий клавиш, но результат странный.
Функция обратного вызова может быть выполнена, когда я нажимаю «специальные» клавиши, такие как «Enter», «Tab», «Shift», «Ctrl» и другие клавиши, имеющие код виртуальной клавиши, в то время как она не может захватить нажатия клавиш при нажатии обычные буквы и цифры.
Я смущен этим, и кто-нибудь может сказать мне причину?
#include <Windows.h>
#include <iostream>
using namespace std;
HHOOK keyboardHook = 0;
LRESULT CALLBACK HookCallback(int code, WPARAM wParam, LPARAM lParam)
{
KBDLLHOOKSTRUCT *ks = (KBDLLHOOKSTRUCT*)lParam;
cout<< "[TEST] " << ks->vkCode << endl;
return CallNextHookEx(0, code, wParam, lParam);
}
int main()
{
keyboardHook = SetWindowsHookExA(WH_KEYBOARD_LL, HookCallback, GetModuleHandleA(NULL), 0);
if (keyboardHook == 0)
{
cout << "failed" << endl;
return -1;
}
cout << "ok" << endl;
MSG msg;
while(GetMessage(&msg, NULL, 0, 0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
UnhookWindowsHookEx(keyboardHook);
return 0;
}