Cómo distinguir entre múltiples dispositivos de entrada en C #

Tengo un escáner de código de barras (que actúa como un teclado) y, por supuesto, 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 forma de "deshabilitar" la entrada del teclado y solo aceptar la entrada del escáner?

Nota: El teclado es parte de una computadora portátil ... por lo que no se puede desconectar. Además, intenté poner el siguiente código protegido anular Boolean ProcessDialogKey (System.Windows.Forms.Keys keyData) {return true; } Pero luego, junto con ignorar las pulsaciones 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 sentinales ya que otras aplicaciones están utilizando el escáner y agregar una secuencia de caracteres sentinales significaría modificar otro código.

Además, no puedo usar el método de sincronización para determinar si la entrada provino de un escáner de código de barras (si se trata de un montón de caracteres seguidos de una pausa) ya que los códigos de barras escaneados podrían ser códigos de barras de un solo carácter.

Sí, estoy leyendo datos de una transmisión.

Estoy tratando de seguir junto con el artículo: Distinguir los escáneres de códigos de barras del teclado en WinForms. Sin embargo, tengo las siguientes preguntas:

Me da 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é definición de anulación de anulación de protección WndProc (ref Message m) debo usar, hay dos implementaciones en el artículo?Am obteniendo un error relacionado con [SecurityPermission (SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)] error CS0246: No se pudo encontrar el tipo o nombre de espacio de nombres 'SecurityPermission' (¿falta una directiva de uso 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) selecciona hardwareId) .Count ()> 0) El error es el error CS1026:) esperado.Debo colocar todo el código del artículo en un archivo .cs llamado BarcodeScannerListener.cs?

reguntas de seguimiento sobre el código fuente de la solución C # publicado por Nicholas Piasecki enhttp: //nicholas.piasecki.name/blog/2009/02/distinguishing-barcode-scanners-from-the-keyboard-in-winforms:

No pude abrir la solución en VS 2005, así que descargué Visual C # 2008 Express Edition y se ejecutó el código. 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é App.config con la identificación de mi escáner de código de barras obtenida usando el Administrador de dispositivos. Parece que hay 2 DeviceNames con HID # Vid_0536 y Pid_01c1 (que se obtiene del Administrador de dispositivos cuando se conecta el escáner). No sé si esto está causando que el escaneo no funcione. Al iterar sobre los nombres de dispositivo, aquí está la lista de dispositivos que encontré (usando el depurador):

"\ ?? \ 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}"

"\ ?? \ HID # Vid_413c y Pid_2101 y MI_00 # 8 y 1966e83d y 0 y 0000 # {884b96c3-56ef-11d1-bc8c-00a0c91405dd}"

"\ ?? \ HID # Vid_413c y Pid_3012 # 7 y 960fae0 y 0 y 0000 # {378de44c-56ef-11d1-bc8c-00a0c91405dd}"
"\ ?? \ Root # RDP_KBD # 0000 # {884b96c3-56ef-11d1-bc8c-00a0c91405dd}" "\ ?? \ ACPI # PNP0303 # 4 & 2f94427b & 0 # {884b96c3-56ef-11d1-bc8c-\}} ? \ Root # RDP_MOU # 0000 # {378de44c-56ef-11d1-bc8c-00a0c91405dd} "\ \ \ ACPI # PNP0F13 # 4 y 2f94427b & 0 # {378de44c-56ef-11d1-bc8c-00a0c91405dd} @ bc8c-00a0c91405dd}

Así que hay 2 entradas para HID # Vid_0536 y Pid_01c1; ¿podría eso estar causando que el escaneo no funcione?

OK, entonces parece que tuve que encontrar una manera de no depender del carácter ASCII 0x04 enviado por el escáner ... ya que mi escáner no envía ese carácter. Después de eso, se dispara el evento escaneado del código de barras y se muestra la ventana emergente con el código de barras. Así que gracias Nicholas por tu ayuda.

Respuestas a la pregunta(7)

Su respuesta a la pregunta