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