USB сканер штрих-кода и WM_KEYDOWN - PullRequest
2 голосов
/ 16 мая 2010

Я пытаюсь написать программу, которая может читать сканер штрих-кода.Кроме того, мне нужно прочитать входные данные, даже когда приложение не находится в фокусе окна (т. Е. Работает в системном трее и т. Д.).

Я нашел эту статью под названием Отличие сканеров штрих-кода отклавиатура в WinForms , которая, кажется, решает точную проблему.Он работает довольно хорошо, он обнаруживает мое устройство и обрабатывает сообщение WM_INPUT.

Однако он проверяет, является ли RAWINPUT.keyboard.Message WM_KEYDOWN (0x100).Кажется, это никогда не получится.Единственная строка кода, которую я изменил в коде, представленном в статье , - это добавление Console.Out.WriteLine для вывода фактических значений этого сообщения:

Console.Out.WriteLine("message: {0}", raw.keyboard.Message.ToString("X"));
if (raw.keyboard.Message == NativeMethods.WM_KEYDOWN)
{
    ....

Вотчто он выводит:

message: B
message: 1000B
message: 3
message: 10003
message: 8
message: 10008
message: 3
message: 10003
message: 5
message: 10005
message: 3
message: 10003
message: 8
message: 10008
message: 8
message: 10008
message: 4
message: 10004
message: 9
message: 10009
message: 9
message: 10009
message: 3
message: 10003

Значение, которое я ожидаю получить при правильном завершении, равно:

257232709

, которое я проверял при сканировании в блокнот.

Я не знаю, подходит ли здесь Операционная система, но я подумал, что должен упомянуть, что я запускаю это в Windows 7 64 и Visual Studio 2010 и .NET Framework 3.5.Сканер представляет собой USB-сканер штрих-кода Symbol LS2208, настроенный как «СКРЫТАЯ ЭМУЛЯЦИЯ КЛАВИАТУРЫ»

Ответы [ 3 ]

3 голосов
/ 14 июня 2010

просто хотел добавить, что microsoft POS.net, бесплатная библиотека от Microsoft для построения систем обслуживания точек, позволяет вам читать большинство распространенных сканеров штрих-кода и дает вам событие, когда штрих-код сканируется. Библиотека является бесплатной и довольно хорошо поддерживается и работает с любым сканером штрих-кода, который имеет драйвер OPOS.

0 голосов
/ 27 мая 2010

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

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

Было отличным упражнением в программировании окон нижнего уровня. Отличный ресурс на pinvoke.net для использования операций ...

0 голосов
/ 16 мая 2010

Одним из непрограммных решений, которое может спасти вас от обострения, было бы получить кабель RS-232 для этого сканера и просто считывать данные с COM-порта. Тогда вам не нужно заботиться о том, какое окно или элемент управления имеют фокус. Этот конкретный сканер имеет драйвер эмуляции COM-порта, хотя он, вероятно, не будет работать под Windows 7.

...