Как узнать, нажата ли смена с помощью RawInput? - PullRequest
5 голосов
/ 19 августа 2010

Я использую RawInput для работы с нажатиями клавиш. Мне трудно определить, нажата ли клавиша Shift вместе с клавишей.

Из RawInputStructure -> RawKeyboard я могу получить нажатую клавишу, но я не уверен, что делать, если клавиши были нажаты одновременно

RI.Data.keyboard.VKey (получает код ключа)

Я пытаюсь отделить Shift для каждого пользователя / клавиатуры, потому что в момент, когда один пользователь / клавиатура переключается, все они делают то же самое с Capslock. Одновременный набор становится действительно грязным.

Как узнать, нажата ли клавиша Shift вместе с другой клавишей? Я ищу это в правильной структуре или я должен искать в другом месте?

1 Ответ

6 голосов
/ 19 августа 2010

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

Это фактически то, что ОС уже делает для обычного ввода с клавиатуры. Он хранит карту состояний клавиш и обновляет ее при каждом сообщении клавиатуры. Используйте GetKeyState для проверки состояния ключа на момент обработки самого последнего сообщения или используйте GetAsyncKeyState для проверки состояния ключа в момент вызова функции. (Они могут отличаться, если состояние клавиатуры изменилось, но вы еще не обработали эти сообщения клавиатуры, например, если пользователь печатает быстрее, чем ваша программа может обработать.)

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