为什么VK_CODE与我的键盘输入不对应?

问题描述 投票:0回答:1

我需要检测键盘上按下的按键(此外还有鼠标点击和位置),为此我使用了

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。

如何正确检测我的键盘按键?

c++ keylogger setwindowshookex wh-keyboard-ll
1个回答
0
投票

我可以仅使用

s->vkCode
作为参数来检查它。

© www.soinside.com 2019 - 2024. All rights reserved.