Tengo un escáner de código de barras (que funciona como un teclado) y, por supuesto, también tengo un teclado conectado a una computadora. El software acepta entradas tanto del escáner como del teclado. Necesito aceptar solo la entrada del escáner. El código está escrito en C#. ¿Hay alguna manera de "desactivar" la entrada desde el teclado y solo aceptar la entrada desde el escáner?Cómo distinguir entre múltiples dispositivos de entrada en C#
Nota: El teclado es parte de una computadora portátil ... por lo que no se puede desenchufar. Además, traté de poner el siguiente código protected override Boolean ProcessDialogKey (System.Windows.Forms.Keys keyData) { return true; } Pero además de ignorar las teclas del teclado, la entrada del escáner de código de barras también se ignora.
No puedo hacer que el escáner envíe caracteres de señal como, el escáner está siendo utilizado por otras aplicaciones y agregar una secuencia de caracteres sentinales significaría modificar otro código.
Además, no puedo usar el método de tiempo para determinar si la entrada vino de un escáner de código de barras (si es un grupo de caracteres seguido de una pausa) ya que los códigos de barras podrían ser códigos de barras de un solo personaje.
Sí, estoy leyendo datos de una transmisión.
Estoy tratando de seguir con el artículo: distinguir los escáneres de códigos de barras del teclado en WinForms. Sin embargo, tengo las siguientes preguntas:
- Me sale un error NativeMethods es inaccesible debido a su nivel de protección. Parece que necesito importar un dll; ¿es esto correcto? Si es así, ¿cómo lo hago?
- ¿Qué protección anula la definición de WndProc (ref Message m) que debo usar, hay dos implementaciones en el artículo?
- Aparece un error relacionado con [SecurityPermission (SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)] error CS0246: No se puede encontrar el tipo o el nombre de espacio de nombres 'SecurityPermission' (¿falta una directiva using o una referencia de ensamblado?) ¿Cómo resuelvo este error?
- También hay un error en la línea que contiene: if ((desde hardwareId en hardwareIds donde deviceName.Contains (hardwareId) seleccione hardwareId) .Count()> 0) Error es el error CS1026:) expected.
- ¿Debo colocar todo el código en el artículo en un archivo .cs llamado BarcodeScannerListener.cs?
preguntas Followup sobre C# código fuente de solución publicado por Nicholas Piasecki en http://nicholas.piasecki.name/blog/2009/02/distinguishing-barcode-scanners-from-the-keyboard-in-winforms/:
- yo no era capaz de abrir la solución en VS 2005, lo que he descargado de Visual C# 2008 Express Edition, y el código corrió. Sin embargo, después de conectar mi escáner de código de barras y escanear un código de barras, el programa no reconoció el escaneo. Puse un punto de quiebre en el método OnBarcodeScanned pero nunca fue golpeado. Cambié el App.config con el ID de mi escáner de código de barras obtenido usando Device Manager. Parece haber 2 DeviceNames con HID # Vid_0536 & Pid_01c1 (que se obtiene del Administrador de dispositivos cuando el escáner está conectado). No sé si esto está causando que el escaneo no funcione. Al iterar sobre deviceNames, aquí está la lista de dispositivos que encontré (usando el depurador):
"\ ??\ 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}"
Por lo tanto, hay 2 entradas para HID # Vid_0536 & Pid_01c1; ¿Podría estar causando que el escaneo no funcione?
OK, así que parece que tuve que encontrar la manera de no depender del carácter ASCII 0x04 que envía el escáner ... ya que mi escáner no envía ese carácter. Después de eso, se dispara el evento escaneado con código de barras y se muestra la ventana emergente con el código de barras. Entonces, gracias a Nicholas por tu ayuda.
Desconecte el teclado. – TheTXI
Agregué una publicación de código de muestra en la parte inferior del artículo. ¡Buena suerte! –
@NicholasPiasecki han pasado 6 años, pero aún así, ¿por qué HTTP 410? – itsho