Несколько клавиатур и низкоуровневых крючков
У меня есть система, в которой у меня есть несколько клавиатур и действительно нужно знать, с какой клавиатуры происходит ключевой штрих. Чтобы объяснить настройку:
- У меня есть обычная ПК и USB-клавиатура.
- У меня есть внешний экран VGA с некоторыми жесткими клавишами
- Жесткие клавиши отображаются в виде стандартной USB-клавиатуры, отправляя ограниченное количество кодов клавиш (F1, F2, Return, + и -)
У меня есть хук низкого уровня (в С#, но на самом деле вызов функции Win32), который способен обрабатывать ввод, даже когда мое приложение не сфокусировано.
Проблема заключается в том, что при использовании обычной клавиатуры некоторые из отображаемых кодов клавиш, выбранных приложением, управляются на внешнем экране. Одним из нажатий клавиш, отправленных внешним экраном и используемым для подтверждения, является VK_RETURN. Если я не смогу идентифицировать "устройство" и не фильтровать его, пользователь может выполнять действия и подтверждать их на экране, даже не глядя на него.
Как узнать, какая клавиатура отвечает за нажатие клавиши?
Ответы
Ответ 1
Да, я исправляюсь, мой плохой, каждый день изучая что-то новое.
Здесь моя попытка компенсировать это:):
-
Зарегистрируйте устройства, которые вы хотите использовать для сырого ввода (две клавиатуры): RegisterRawInputDevices().
-
Вы можете получить эти устройства из GetRawInputDeviceList()
-
После того, как вы зарегистрировали свои устройства, вы начнете получать сообщения WM_INPUT.
-
lParam сообщения WM_INPUT содержит структуру RAWKEYBOARD, которую вы можете использовать, чтобы определить клавиатуру, откуда поступал вход, плюс виртуальный ключевой код и тип сообщения (WM_KEYDOWN, WM_KEYUP,...)
-
Таким образом, вы можете установить флаг, откуда поступило последнее сообщение, а затем отправить его на обычные обработчики ввода клавиатуры.
Ответ 2
Поздно, но для новых читателей это может быть полезной ссылкой:
Комбинирование необработанного ввода и клавиатуры Hook для выборочного блокирования ввода с нескольких клавиатур
Это подробное описание, как решить проблему обнаружения нажатий клавиш с двух разных клавиатур без написания фильтра устройства или драйвера.
Ответ 3
Невозможно это сделать. Windows реферат это для вас. Как уже упоминалось, вам нужно написать/изменить драйвер устройства.