我需要检测键盘上按下的按键(此外还有鼠标点击和位置),为此我使用了
Windows Hooks
,更具体地说是 MapVirtualKeyExA
。但是,“虚拟按键代码”中记录的代码的相应按键并不是指我自己的键盘按键。
举个例子,这是一个代码,用于向我显示我按下的键的 VK_CODE:
#include <iostream>
#include <windows.h>
//Declarando o Hook:
LRESULT CALLBACK KBDHook(int nCode, WPARAM wParam, LPARAM lParam)
{
KBDLLHOOKSTRUCT *s = reinterpret_cast<KBDLLHOOKSTRUCT *>(lParam);
switch (wParam){
case WM_KEYDOWN:
std::cout << MapVirtualKey(s->vkCode, MAPVK_VK_TO_VSC) << '\n';
break;
}
//Libera o teclado para ser utilizado pelo sistema operacional novamente
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
int main(){
//Criando o hook: (WH_KWYBOARD_LL é o tipo de hook; ll significa Low Level)
HHOOK kbd = SetWindowsHookEx(WH_KEYBOARD_LL, &KBDHook, 0, 0);
MSG message;
while (GetMessage(&message, NULL, NULL, NULL) > 0){
TranslateMessage(&message);
DispatchMessage(&message);
}
UnhookWindowsHookEx(kbd);
return 0;
}
使用此代码,如果我按 Tab,我将得到“15”十进制答案;是什么让我无法用
if(MapVirtualKey(s->vkCode, MAPVK_VK_TO_VSC) == VK_TAB){/*TAB Pressed*/}
检测到密钥,因为“VK_TAB”对应于十进制9。
如何正确检测我的键盘按键?
我可以仅使用
s->vkCode
作为参数来检查它。