从WM_KEYDOWN消息中检测非字符按

时间:2011-07-10 23:02:35

标签: c++ winapi

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";

1 个答案:

答案 0 :(得分:2)

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