Подтвердить что ты не робот

Несколько клавиатур и низкоуровневых крючков

У меня есть система, в которой у меня есть несколько клавиатур и действительно нужно знать, с какой клавиатуры происходит ключевой штрих. Чтобы объяснить настройку:

  • У меня есть обычная ПК и USB-клавиатура.
  • У меня есть внешний экран VGA с некоторыми жесткими клавишами
  • Жесткие клавиши отображаются в виде стандартной USB-клавиатуры, отправляя ограниченное количество кодов клавиш (F1, F2, Return, + и -)

У меня есть хук низкого уровня (в С#, но на самом деле вызов функции Win32), который способен обрабатывать ввод, даже когда мое приложение не сфокусировано.

Проблема заключается в том, что при использовании обычной клавиатуры некоторые из отображаемых кодов клавиш, выбранных приложением, управляются на внешнем экране. Одним из нажатий клавиш, отправленных внешним экраном и используемым для подтверждения, является VK_RETURN. Если я не смогу идентифицировать "устройство" и не фильтровать его, пользователь может выполнять действия и подтверждать их на экране, даже не глядя на него.

Как узнать, какая клавиатура отвечает за нажатие клавиши?

4b9b3361

Ответ 1

Да, я исправляюсь, мой плохой, каждый день изучая что-то новое.

Здесь моя попытка компенсировать это:):

  • Зарегистрируйте устройства, которые вы хотите использовать для сырого ввода (две клавиатуры): RegisterRawInputDevices().

  • Вы можете получить эти устройства из GetRawInputDeviceList()

  • После того, как вы зарегистрировали свои устройства, вы начнете получать сообщения WM_INPUT.

  • lParam сообщения WM_INPUT содержит структуру RAWKEYBOARD, которую вы можете использовать, чтобы определить клавиатуру, откуда поступал вход, плюс виртуальный ключевой код и тип сообщения (WM_KEYDOWN, WM_KEYUP,...)

  • Таким образом, вы можете установить флаг, откуда поступило последнее сообщение, а затем отправить его на обычные обработчики ввода клавиатуры.

Ответ 2

Поздно, но для новых читателей это может быть полезной ссылкой:

Комбинирование необработанного ввода и клавиатуры Hook для выборочного блокирования ввода с нескольких клавиатур

Это подробное описание, как решить проблему обнаружения нажатий клавиш с двух разных клавиатур без написания фильтра устройства или драйвера.

Ответ 3

Невозможно это сделать. Windows реферат это для вас. Как уже упоминалось, вам нужно написать/изменить драйвер устройства.