Я пытаюсь написать программу, которая может читать сканер штрих-кода.Кроме того, мне нужно прочитать входные данные, даже когда приложение не находится в фокусе окна (т. Е. Работает в системном трее и т. Д.).
Я нашел эту статью под названием Отличие сканеров штрих-кода отклавиатура в 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, настроенный как «СКРЫТАЯ ЭМУЛЯЦИЯ КЛАВИАТУРЫ»