Win32: получить информацию об устройстве в WH_KEYBOARD_LL || Блокировать ввод на WM_INPUT при использовании необработанного ввода - PullRequest
1 голос
/ 24 августа 2010

Мне нужно написать программу для изменения ввода определенной скрытой клавиатуры USB (сканер штрих-кода) под Windows.Должен применяться следующий рабочий процесс:

Прослушивание ввода с устройства -> ввод записи -> прекращение ввода ввода в активное приложение -> обработка записанного ввода и вывода результата в активное приложение

Итак, яЯ искал это, но теперь я застрял!

Очевидно, что есть два варианта «ввода записи»: ловушка низкого уровня WH_KEYBOARD_LL и реакция на событие WM_INPUT в необработанном вводе

Проблема заключается в следующем:- с WH_KEYBOARD_LL я не нашел способа определить, с какого устройства поступил ввод - в событии WM_INPUT я не нашел способа остановить нажатие клавиши - если WH_KEYBOARD_LL используется для остановки нажатия клавиши, он не попадет в Raw Input, таким образом, не вызывая WM_INPUT ипоэтому я не могу определить источник нажатия клавиши

Какие у меня параметры в пользовательском режиме?

С уважением, Доминик

Ответы [ 4 ]

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

К сожалению, нет простого способа сделать это. Вы со своими WH_KEYBOARD_LL и WM_INPUT. Хотя может быть возможность выбора:

Вы проверяли, происходит ли WM_INPUT перед крючком? Если бы это было так, вы могли бы запомнить символы из WM_INPUT и - в ловушке - удалить только те символы, которые пришли с вашего сканера штрих-кода.

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

@ Майкл: Кажется, что WM_INPUT происходит после хука, вот в чем проблема ...

PS: Извините, что не пользуюсь комментариями ... Я просто решил создать учетную запись после публикации этого вопроса, поэтому я даже не могу комментировать свой ОП или какие-либо ответы, кроме моего собственного: /

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

@ Hans Passant: WH_KEYBOARD_LL - это глобальный хук, который можно настроить в C #

0 голосов
/ 14 ноября 2012

Я считаю, что RAWINPUT - ваш лучший вариант. Вот что Microsoft должна сказать по этому поводу.

Необработанная модель ввода отличается от исходной модели ввода Windows для клавиатуры и мыши.В исходной модели ввода приложение получает независимый от устройства ввод в виде сообщений, которые отправляются или публикуются в его окнах, таких как WM_CHAR, WM_MOUSEMOVE и WM_APPCOMMAND.Напротив, для необработанного ввода приложение должно зарегистрировать устройства, с которых оно хочет получать данные.Кроме того, приложение получает необработанный ввод через сообщение WM_INPUT.

У модели необработанного ввода есть несколько преимуществ:

  • Приложению не нужно обнаруживать или открывать устройство ввода..
  • Приложение получает данные непосредственно с устройства и обрабатывает данные для своих нужд.
  • Приложение может различать источник ввода, даже если оно принадлежит устройству того же типа.,Например, два мышиных устройства.
  • Приложение управляет трафиком данных, указывая данные из набора устройств или только определенных типов устройств.

Устройства HID можно использовать по мере их появления.доступны на рынке, не дожидаясь появления новых типов сообщений или обновленной ОС с новыми командами в WM_APPCOMMAND.

Здесь вы можете исследовать

Также у меня есть пример здесь

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