У меня есть сканер штрих-кода (который действует как клавиатура) и, конечно, у меня слишком подключена клавиатура к компьютеру. Программное обеспечение принимает данные от сканера и клавиатуры. Мне нужно принять только вход сканера. Код написан на C #. Есть ли способ «отключить» ввод с клавиатуры и принимать ввод только со сканера?
Примечание:
Клавиатура является частью ноутбука ... поэтому ее нельзя отключить. Также я попытался поставить следующий код
защищенное переопределение Boolean ProcessDialogKey (System.Windows.Forms.Keys keyData)
{
вернуть истину;
}
Но затем, наряду с игнорированием нажатий клавиш на клавиатуре, ввод сканера штрих-кода также игнорируется.
Я не могу позволить сканеру отправлять отправные символы, так как сканер используется другими приложениями, и добавление потока символьных символов будет означать изменение другого кода.
Кроме того, я не могу использовать метод определения времени, чтобы определить, поступил ли ввод со сканера штрих-кода (если это набор символов, за которым следует пауза), поскольку отсканированные штрих-коды потенциально могут быть штрих-кодами из одного символа.
Да, я читаю данные из потока.
Я пытаюсь следовать статье: «Отличение сканеров штрих-кода от клавиатуры в WinForms». Однако у меня есть следующие вопросы:
- Я получаю сообщение об ошибке. NativeMethods недоступен из-за уровня защиты. Кажется, что мне нужно импортировать DLL; это правильно? Если да, то как мне это сделать?
- Какое определение защищенного переопределения void WndProc (ref Message m) мне следует использовать, в статье есть две реализации?
- Получается ошибка, связанная с ошибкой [SecurityPermission (SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)] CS0246: Не удалось найти тип или имя пространства имен «SecurityPermission» (отсутствует директива using или ссылка на сборку? ). Как мне устранить эту ошибку?
- В строке также содержится ошибка, содержащая: if ((из hardwareId в hardwareIds, где deviceName.Contains (hardwareId) выберите hardwareId) .Count ()> 0) Ошибка - ошибка CS1026:) ожидается.
- Должен ли я поместить весь код в статье в один файл .cs с именем BarcodeScannerListener.cs?
Последующие вопросы об исходном коде решения 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 & 0 & 0000 # {4d1e55b2-F16F-11cf-88cb-001111000030}" * * тысяча тридцать-два
"\ ?? \ HID # Vid_0536 & Pid_01c1 & MI_00 # 9 & 38e10b9 & 0 & 0000 # {884b96c3-56ef-11d1-bc8c-00a0c91405dd}" * +1034 *
* 1 035 * "\ ?? \ HID # Vid_413c & Pid_2101 & MI_00 # 8 & 1966e83d & 0 & 0000 # {884b96c3-56ef-11d1-bc8c-00a0c91405dd}"
* * Тысяча тридцать-семь "\ ?? \ HID # Vid_413c & Pid_3012 # 7 & 960fae0 & 0 & 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, отправляемого сканером ... так как мой сканер не отправляет этот символ. После этого запускается событие сканирования штрих-кода и отображается всплывающее окно со штрих-кодом. Так что спасибо Николас за вашу помощь.