Различают левую и правую клавиши Shift с помощью RAWINPUT - PullRequest
2 голосов
/ 07 мая 2011

RAWINPUT предоставляет два флага (RI_KEY_E0 и RI_KEY_E1), чтобы проверить, нажата ли левая или правая версия клавиши. Это прекрасно работает для CTRL, но не для левого и правого сдвига. Фактически флаги одинаковы для обоих, и VKey также одинаков (VK_SHIFT). Как я могу узнать, какая смена была нажата? Я работаю на Windows 7. Интересно, что значения flags / vkey одинаковы, независимо от того, какую клавишу Shift я нажимаю.

1 Ответ

8 голосов
/ 07 мая 2011

Windows 7, и я получаю только VK_SHIFT, а не варианты L / R

Что является объяснением того, почему это не работает так, как вы думаете, должно.За этим стоит древняя история.Контроллер клавиатуры был переработан для IBM AT, опять же для улучшенной клавиатуры.Он начал рассылать префиксы 0xe0 и 0xe1 для клавиш, которые были добавлены в раскладку клавиатуры.Как правые клавиши Ctrl и Alt.

Но на клавиатурах всегда было две клавиши Shift.Оригинальный IBM PC не считал их специальными ключами, они просто имеют другой код сканирования.Который был сохранен в более поздних обновлениях.Соответственно, вы не получаете флаги RI_KEY_E0 или E1 для них.Вы должны различать их по значению RAWKEYBOARD.MakeCode.Левая клавиша Shift имеет makecode 0x2a, правая клавиша 0x36.

Обратите внимание, что левая клавиша Ctrl и Alt также не имеют флагов.Они соответствуют соответствующим клавишам на старой раскладке клавиатуры ПК.Описание флагов в статье библиотеки MSDN не очень точное.

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