【问题标题】:Detecting non-character press from WM_KEYDOWN message从 WM_KEYDOWN 消息中检测非字符按下
【发布时间】:2011-07-10 23:02:34
【问题描述】:

win32 中是否有一个函数可以获取 CTRL、ALT 或大写锁定键的虚拟键代码并返回一个字符串“CTRL”、“ALT”、“CAPSLOCK”?

我只能接收 WM_KEYDOWN 消息,但不能接收 WM_CHAR 消息。我知道我可以通过将虚拟键代码传递给函数 ToUnicode() 来确定按下了哪个字符键,它会告诉我按下了哪个字符键。

但是如果我通过 CTRL 虚拟键代码,该函数什么也不返回。

char keyPressed[256];
KBDLLHOOKSTRUCT kbdStruct = *((KBDLLHOOKSTRUCT*)lParam);
GetKeyboardState((PBYTE)&keyState);
ToUnicode(kbdStruct.vkCode, kbdStruct.scanCode, (PBYTE)&keyState, (LPWSTR)&keyPressed, sizeof(keyPressed) / 2, 0);    
// so if the key pressed was 'a' then keyPressed = "a";
// & if the key pressed was CTRL then keyPressed = "CTRL";

【问题讨论】:

    标签: c++ winapi


    【解决方案1】:

    您可以将lParam 值从WM_KEYDOWN 传递到GetKeyNameText,它会为您返回密钥名称。

    【讨论】:

    • “该函数可能会针对不同的输入语言环境给出不同的结果”。例如,不要期望 Ctrl 在德语中被命名为 Ctrl。
    猜你喜欢
    • 2012-05-25
    • 2011-11-10
    • 2023-04-01
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 2016-04-09
    • 2016-03-04
    • 1970-01-01
    相关资源
    最近更新 更多