|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
10.09.2012, 21:09 | #1 |
somewhere else
Участник клуба
Регистрация: 17.07.2008
Сообщений: 1,409
|
User-mode драйвер / программа-фильтр для сканера штрих-кодов - какой правильный подход при разработке?
У меня сейчас стоит задача сделать некую программу или юзермодный драйвер если точнее, которая позволяла бы получать ивенты сканера и получать сами сканированные коды и при этом подавлять сами сообщения. В принципе на данный момент у меня уже что-то такое есть, но есть проблемы.
Я сделал пока так: - Создал невидимое окно HWND_MESSAGE - Зарегистрировал его как RawInput-приемник (RIDEV_INPUTSINK) - Получаю WM_INPUT, фильтрую по hDevice - Сам hDevice получаю из списка всех HID-устройств и Vendor ID и Product ID конкретного сканера (вот только не знаю VID&PID это сканера ли, или же это VID&PID порта или еще что-то такое, не проверял). Проблемы у меня с этим такие: - Нужно хранить список VID&PID для всех устройств, аналогичные юзермодные драйверы от производителей к таким вещам не привязаны - Нет возможность подавить сами сообщения На данный момент я вижу еще два способа реализации данной задачи: 1. Перевести сканер в режим эмуляции COM-порта, легко и трудно одновременно - сканер то не один будет, да и опять же остается проблема с VID&PID как я подозреваю. Неприемлемо в рамках ТЗ. 2. Подключить к стеку драйверов сканера свой драйвер-фильтр. Очень сложно и вообще я даже не знаю возможно ли это сделать, не зная VID&PID устройства, это конечно решит проблему Вопросы у меня такие: 1. Как среди всех HID-устройств найти именно сканер? Есть ли у него какие-либо свойства доступные через WinAPI, которые бы явно указывали на то, что это сканер. 2. Какой подход могли использовать сами производители? Как лучше всего это реализовать? И самое главное как избавится от самих сообщений, как сделать чтобы они только в мою программу приходили? Может быть кто-нибудь такое уже писал, поделитесь пожалуйста опытом и/или исходниками готовых решений? P.S.: Под подавлением сообщений я имею в виду, чтобы моя программа становилась конечной точкой куда приходят эти сообщения клавиатуры/сканера, то есть чтобы я нажимал клавишу и данные о нажатии приходили только в мою программу. Сейчас получается я только получаю копию, а не единственный экземпляр - если при включенной программе поставить фокус на любое текстовое поле, то там все равно появятся циферки штрих-кода при сканировании. P.P.S: Драйвер производителя с аналогичными функциями на целевой платформе не работает, потому сканер работает в режиме доп.клавиатуры - так все сканеры умеют судя по всему. P.P.P.S: В гугле был, есть и буду
"Тяжело в учении, легко в бою" - А.В. Суворов
|
10.09.2012, 22:52 | #2 |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
че-то, не совсем ясна задача. нужно ненавязчиво подсматривать штрих-коды, которые прочитал сканер, или просто работать со сканером?
если просто работать со сканером, то зачем все так усложнять? перевести его в режим COM порта, и следить за буфером. можно конечно развлечь себя по теме PID/VID, но сканер понимает некий набор комманд, на которые он дает весьма предсказуемый ответ, что можно использовать для идентификации. ььь... а производитель сканеров вообще не известен? Последний раз редактировалось f.hump; 10.09.2012 в 23:02. |
11.09.2012, 02:36 | #3 |
somewhere else
Участник клуба
Регистрация: 17.07.2008
Сообщений: 1,409
|
Zebex z-3152 - вот такой по моему. Задача простая. Получить все что считал сканер и сгенерировать ивент. При этом никакие символы в текущее выбранное текстовое поле дойти не должны и нужно сделать так чтобы это работало с любым подобным сканером, которые подключается в систему как клавиатура.
"Тяжело в учении, легко в бою" - А.В. Суворов
|
11.09.2012, 10:32 | #4 |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
Я работал с HoneyWell 3800g, но у меня не было ограничения на клавиатуру, потому конфигурировал их в COM порт, когда во входящем буфере че-то появлялось, читал буфер и передавал на верх через callback. Для идентификации сканера использовал команду кортроля громкости пищалки: запрашивал текущий уровень громкости.
Не знаю на счет клавиатуры, но может он че-то типа WM_KEYDOWN/WM_KEYUP шлет, ну тогда поставить фильтр на эти сообщения в message loop, и передавать их дальше только при выполнении каких-то условий. |
11.09.2012, 12:16 | #5 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
...загляните в вашу же тему в другом месте, лень копипастить сюда.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Программа для считывания штрих-кодов | Alexx83 | Фриланс | 6 | 05.03.2012 20:29 |
DeviceIOControl в user-mode? | chechestor | Win Api | 2 | 22.12.2010 11:51 |
Распознавание штрих-кодов | vlad00777 | Мультимедиа в Delphi | 1 | 23.08.2010 21:45 |
Не могу найти драйвер для сканера Mustek BearPaw 1200CU Plus | мотя | Компьютерное железо | 5 | 04.05.2010 12:49 |
Сканер штрих кодов | asale | Microsoft Office Excel | 7 | 30.11.2008 19:57 |