Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

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

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

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

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

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top