Как определить, нажата ли определенная клавиша, зная только ее положение на клавиатурах США? - PullRequest
3 голосов
/ 27 декабря 2008

Учтите, что для видеоигры Windows мне нужно определить, была ли нажата клавиша, которая генерирует символы `и ~ на английской раскладке клавиатуры США (которая обычно находится ниже клавиши Escape и слева от 1). Это может звучать как банальный вопрос, но мне он не кажется.

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

Наше текущее «решение» - использовать LoadKeyboardLayout и MapVirtualKeyEx, чтобы найти код сканирования OEM ключа, который генерирует символ `на английской раскладке клавиатуры США, а затем просто прослушать этот код сканирования OEM. Проблема в том, что это не работает, если у пользователя не установлена ​​английская раскладка в США.

Есть ли реальный способ сделать это в Windows?

Ответы [ 2 ]

4 голосов
/ 27 декабря 2008

OEM-код сканирования не меняется с клавиатуры на клавиатуру. Нет причин не использовать его.

В дни DOS для игр использовались одни и те же коды сканирования, поскольку это был единственный способ обнаружения событий нажатия клавиш и нажатия клавиш. Ни у кого не было проблем с этим, и я сомневаюсь, что это изменится в будущем.

Если вам нужен другой вариант, вы можете попробовать DirectInput-API. Он также дает вам необработанные коды сканирования, и, если я не ошибаюсь, вы также можете запросить физическое положение, размерность и т.д. каждого ключа.

1 голос
/ 27 декабря 2008

Свяжите игровое действие с персонажем, а не с положением клавиши. Иначе как вы скажете пользователю, какую клавишу нажимать? "под ключом выхода"? Возможно, у них там ничего нет, но если вы скажете им «клавишу ^», они могут это найти.

Возможно, вы также захотите сделать его настраиваемым для размещения экзотических раскладок клавиатуры и пользовательских предпочтений.

...