ASCII персонаж из VK_Code - PullRequest
       30

ASCII персонаж из VK_Code

3 голосов
/ 04 сентября 2011

У меня есть небольшое WIN32 C-приложение, в котором я работаю со структурой KBDLLHOOKSTRUCT.Эта структура содержит VK-код для нажатой клавиши.

Я пытаюсь преобразовать его в ASCII-символ.Для этого я использую функцию MapVirtualKey, которая хорошо работает.

Единственная проблема заключается в том, что один VK-код может оставаться для нескольких символов.Пример:

На моей клавиатуре (швейцарско-немецкий) есть ключ-символ . .Если я нажму Shift + . , тогда он создаст :.ВК-код такой же.Это не проблема, и я также могу проверить, нажата ли Shift или Caps Lock .

Моя единственная проблема: Как я могу получить символ ':«?Мне нужна функция, подобная этой:

GetKeyChar(vkCode, shift)

Мне нужна эта функция, чтобы получить «нормальное» и «смещенное» значение клавиатуры.Конечно, я мог бы жестко закодировать это, но мне не нравится делать это таким образом.

Ответы [ 4 ]

3 голосов
/ 04 сентября 2011

Проблема в том, что KBDLLHOOKSTRUCT не имеет всей информации, необходимой вам для выполнения перевода. Вы получаете сообщение при каждом нажатии клавиши. Поэтому для Shift + X вы получите сообщение о том, что была нажата клавиша Shift, и другое сообщение о том, что была нажата клавиша «X».

Вам необходимо вызвать GetKeyboardState , чтобы получить состояние клавиш Shift, Alt, Ctrl и (возможно, других). Затем позвоните ToAsciiEx или ToUnicodeEx.

2 голосов
/ 04 сентября 2011

Функции, которые вы ищете: ToAscii, ToAsciiEx, ToUnicode, ToUnicodeEx.

2 голосов
/ 04 сентября 2011

Вы ищете ToUnicode, который возвращает символ Unicode, сгенерированный этим нажатием клавиши.

0 голосов
/ 09 ноября 2011

short VkKeyScan(char ch) API содержит информацию о смене.Он переводит символ в код виртуальной клавиши и состояние сдвига.

См. Это: Преобразование символа в соответствующий код виртуальной клавиши

...