Обнаружение несимвольной печати из сообщения WM_KEYDOWN - PullRequest
1 голос
/ 11 июля 2011

Есть ли в win32 функция, которая может взять код виртуальной клавиши для клавиши CTRL, ALT или capslock и вернуть строку с надписью "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 Ответ

2 голосов
/ 11 июля 2011

Вы можете передать значение lParam от WM_KEYDOWN до GetKeyNameText, и оно вернет вам имя ключа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...