У меня есть система, в которой у меня несколько клавиатур, и мне действительно нужно знать, с какой клавиатуры происходит нажатие клавиши. Чтобы объяснить настройку:
У меня есть ловушка низкого уровня (в C#, но на самом деле вызывающая функциональность Win32), которая может обрабатывать ввод, даже когда мое приложение не сфокусировано.
Проблема в том, что при использовании обычной клавиатуры некоторые из отображенных кодов клавиш улавливаются приложением, запускаемым на внешнем экране. Одно из нажатий клавиш, отправляемых внешним экраном и используемых для подтверждения, - это VK_RETURN. Если я не смогу идентифицировать «устройство» и отфильтровать его, пользователь мог бы выполнять действия и подтверждать их на экране, на который даже не смотрел.
Как узнать, какая клавиатура отвечает за нажатие клавиш?
Не совсем ответ на мой вопрос. Ответ, помеченный как правильный, отлично работал в течение нескольких лет.
@ ray-haves Можете ли вы подтвердить, можете ли вы запретить ввод из изготовление для других приложений даже после того, как вы его отфильтровали. То есть, когда нажатие клавиши фильтруется через необработанный ввод, можно ли остановить его обработку остальной частью операционной системы?
извините, не та цель, @ ray-hayes
@Chico, нет, это не мешает распространению ключа в другие приложения. Но мой вопрос был не в этом. У меня было специальное аппаратное устройство, которое должно было передавать нажатия клавиш приложению (в полноэкранном режиме на отдельном мониторе) независимо от того, было ли оно сфокусировано или нет. Конечно, если они будут играть с клавишами, когда сфокусированы на Microsoft Word, они получат необычные результаты, но, как оказалось, это не очень похоже из-за того, как все устроено физически. Хотя ваш ответ может быть лучше, реализованный вариант пока работает нормально! ;-)
Спасибо за подтверждение такого поведения ;-)





Это невозможно сделать. Windows абстрагирует это за вас. Как уже упоминалось, вам необходимо написать / изменить драйвер устройства.
Ну что ж, обидно. Я собираюсь обратиться к производителям устройств и посмотреть, есть ли способ перепрограммировать оборудование для использования различных кодов клавиш (надеюсь, с высокими числами VK_Fn).
Непринятие этого, поскольку это действительно похоже на то, что это возможно без драйвера на основе ответа A Nony Mouse.
Да, я исправляюсь, мое плохое, каждый день узнаю что-то новое.
Вот моя попытка наверстать упущенное :):
Зарегистрируйте устройства, которые вы хотите использовать для необработанного ввода (две клавиатуры), с помощью :: RegisterRawInputDevices ().
Вы можете получить эти устройства из GetRawInputDeviceList ()
После того, как вы зарегистрируете свои устройства, вы начнете получать сообщения WM_INPUT.
LParam сообщения WM_INPUT содержит структуру RAWKEYBOARD, которую вы можете использовать для определения клавиатуры, с которой был получен ввод, плюс виртуальный код клавиши и тип сообщения (WM_KEYDOWN, WM_KEYUP, ...)
Таким образом, вы можете установить флаг того, откуда пришло последнее сообщение, а затем отправить его обычным обработчикам ввода с клавиатуры.
У меня аналогичная проблема, когда мне нужно получить несколько событий касания. есть ли у вас более подробный пример?
Я ответил на этот вопрос здесь: Как определить устройство ввода, если включены и мышь, и тачпад. В ответе используется библиотека c и созданные мной драйверы.