Определить ввод с разных устройств - PullRequest
1 голос
/ 12 августа 2010

Мой компьютер имеет два устройства, работающих как клавиатура, обычная клавиатура и устройство ввода HID ( H uman I nterface D evice) (это удаленный контроль).

Я хочу отделить вход от клавиатуры и от пульта, захватывая только пульт. Как я могу написать программу на C / C ++ для выполнения этой задачи?

Это не простая задача, потому что эта программа зависит от операционной системы. Мне это нужно для Windows, но если кто-то знает, как это сделать для Linux, я был бы также признателен за это.

Ответы [ 2 ]

2 голосов
/ 12 августа 2010

В Windows XP и более поздних версиях вы можете использовать необработанные сообщения устройства ввода.Сначала вы вызываете функцию API RegisterRawInputDevices(), чтобы включить необработанный ввод для «клавиатур».Вы звоните GetRawInputDeviceList(), чтобы перечислить устройства ввода и найти дескриптор, соответствующий вашему пульту.Затем вы обрабатываете сообщения окна WM_INPUT, которые содержат необработанные входные события, и проверяете заголовок присоединенной структуры RAWINPUT, чтобы увидеть, совпадает ли дескриптор исходного устройства с дескриптором, который вы получили ранее.Если это произойдет, вы можете продолжить обработку события.

Обратите внимание на флаг RIDEV_INPUTSINK, который может быть вам полезен.Если вы укажете его, оно заставит ваше окно получать сообщения WM_INPUT для событий , даже если оно не является окном переднего плана .

1 голос
/ 12 августа 2010

Я сделал это под Linux - устройство, которое у меня было, было считывателем штрих-кода, которое выглядит как HID-клавиатура.

Я сделал это, открыв соответствующее устройство событий в /dev/input, затем используя EVIOCGRAB ioctl для «захвата» устройства ввода, что делает его эксклюзивным для моего приложения (события для этого устройства ввода больше не переходят в X или что-либо еще).Затем я просто читаю входные события с устройства событий и действую в соответствии с ними.

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