У меня есть сканер штрих-кода (который действует как клавиатура), и, конечно, у меня есть клавиатура, подключенная к компьютеру. Программное обеспечение принимает вход как от сканера, так и от клавиатуры. Мне нужно принять только вход сканера. Код написан на C#. Есть ли способ «отключить» ввод с клавиатуры и принимать только вход от сканера?Как отличить несколько устройств ввода в C#
Примечание: Клавиатура является частью ноутбука ... поэтому ее нельзя отключить. Кроме того, я попытался поставить следующий код protected override Boolean ProcessDialogKey (System.Windows.Forms.Keys keyData) { return true; } Но затем, игнорируя нажатия клавиш с клавиатуры, вход сканера штрих-кода также игнорируется.
Невозможно, чтобы сканер отправил ссылочные символы, так как сканер используется другими приложениями, а добавление потока сигнальных символов будет означать изменение другого кода.
Кроме того, я не могу использовать метод синхронизации, определяющий, поступал ли вход от сканера штрих-кода (если его куча символов сопровождалась паузой), поскольку сканированные штрих-коды потенциально могут быть одиночными символьными штрих-кодами.
Да, я читаю данные из потока.
Я стараюсь следовать вместе со статьей: Отличительные сканеры штрих-кода от клавиатуры в WinForms. Однако у меня есть следующие вопросы:
- Я получаю сообщение об ошибке NativeMethods недоступен из-за его уровня защиты. Кажется, мне нужно импортировать dll; это верно? Если да, то как мне это сделать?
- Какое защищенное определение woid WndProc (ref Message m) следует использовать, есть две реализации в статье?
- Получение ошибки, связанной с [SecurityPermission (SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)] error CS0246: Не удалось найти имя типа или пространства имен «SecurityPermission» (вам не хватает директивы using или ссылки на сборку?). Как устранить эту ошибку?
- Также есть ошибка в строке, содержащей: if ((from hardwareId в hardwareIds, где deviceName.Contains (hardwareId) select hardwareId) .Count()> 0) Ошибка - это ошибка CS1026:).
- Должен ли я размещать весь код в статье в одном файле .cs с именем BarcodeScannerListener.cs?
Followup вопросы о C# исходного раствора кода разместил Николас Пясецкий на http://nicholas.piasecki.name/blog/2009/02/distinguishing-barcode-scanners-from-the-keyboard-in-winforms/:
- я не смог открыть решение в VS 2005, так что я скачал Visual C# 2008 Express Edition, и код побежал. Однако после подключения сканера штрих-кодов и сканирования штрих-кода программа не распознала сканирование. Я поставил точку останова в методе OnBarcodeScanned, но он никогда не попадал. Я изменил App.config с идентификатором моего сканера штрих-кода, полученного с помощью диспетчера устройств. Кажется, есть 2 имени устройства с HID # Vid_0536 & Pid_01c1 (который получен из диспетчера устройств при подключении сканера). Я не знаю, вызывает ли это сканирование, чтобы он не работал. При итерации над именами устройств, вот список устройств, которые я нашел (используя отладчик):
"\ ??\ HID # Vid_0536 & Pid_01c1 & MI_01 # 9 & 25ca5370 0000 # {4d1e55b2-F16F-11cf-88cb-001111000030} "
" \ ?? \ HID # Vid_0536 & Pid_01c1 & MI_00 # 9 & 38e10b9 0000 # {884b96c3-56ef-11d1-bc8c-00a0c91405dd} "
" \ ?? \ HID # Vid_413c & Pid_2101 & MI_00 # 8 & 1966e83d 0000 # {884b96c3-56ef-11d1-bc8c- 00a0c914 05dd} "
"\ ?? \ HID # Vid_413c & Pid_3012 # 7 & 960fae0 0000 # {378de44c-56ef-11d1-bc8c-00a0c91405dd}"
" \ ?? \ Root # RDP_KBD # 0000 # {884b96c3-56ef-11d1-bc8c-00a0c91405dd} " "\ ?? \ ACPI # PNP0303 # 4 & 2f94427b & 0 # {884b96c3-56ef-11d1-bc8c-00a0c91405dd}" " \ ?? \ Root # RDP_MOU # 0000 # {378de44c-56ef-11d1-bc8c-00a0c91405dd}» "\ ?? \ ACPI # PNP0F13 # 4 & 2f94427b & 0 # {378de44c-56ef-11d1-bc8c-00a0c91405dd}"
Итак, есть 2 записи для HID # Vid_0536 & Pid_01c1; может ли это заставить сканирование работать?
ОК, так что мне показалось, что мне нужно выяснить способ не зависеть от символа ASCII 0x04, отправляемого сканером ... поскольку мой сканер не отправляет этот символ. После этого происходит отсканированное событие штрих-кода и отображается всплывающее окно со штрих-кодом. Так что спасибо Николаю за вашу помощь.
Отключите клавиатуру. – TheTXI
Я добавил образец кода в нижней части статьи. Удачи! –
@NicholasPiasecki прошло 6 лет, но все же - почему HTTP 410? – itsho