2008-09-03 16 views
5

Estoy escribiendo un sistema C# POS (punto de venta) que toma la entrada de un lector de tarjeta magna de teclado. Esto significa que cualquier dato que lea de una banda magnética se ingresa como si hubiera sido escrito en el teclado muy rápidamente. Actualmente estoy manejando esto al asociarme al evento KeyPress y buscando una serie de teclas muy rápidas que contengan los caracteres centinela de pase de tarjeta.La mejor manera de manejar la entrada desde un teclado "cuña"

¿Hay una forma mejor de manejar este tipo de entrada?

Editar: El dispositivo simplemente presenta los datos como pulsaciones de teclas y no interactúa a través de algún otro controlador. También utilizamos una amplia gama de estos tipos de dispositivos, por lo que idealmente un método debería funcionar independientemente del modelo específico de cuña que se utiliza. Sin embargo, si no hay otra opción, tendré que conformarme.

Respuesta

10

Una cosa que puedes hacer es que deberías ser capaz de configurar tu lector de cuña para que presente uno o más caracteres de escape antes o después de la cadena. Utilizaría estos caracteres de escape para saber que está a punto de tener (o que solo tuvo) una entrada de tarjeta magnética.

Esta misma técnica es utilizada por los dispositivos lectores de códigos de barras por lo que su aplicación sabe cómo enfocar o manejar la entrada de datos desde el dispositivo.

Lo negativo de este enfoque es que debe configurar correctamente sus dispositivos externos. Esto puede ser un problema de implementación.

Esto asume que sus dispositivos simplemente presentan los datos como pulsaciones de teclas y no interactúan a través de algún otro controlador.

0

I segundo @jttraino's idea.

Es el camino a seguir para lectores de códigos de barras/códigos y otros dispositivos similares que son Plug and Play (PnP). He utilizado la misma técnica para configurar un par de escáneres de códigos de barras 1D y 2D en mi tarea anterior.

2

Creo que lo está manejando de una manera aceptable, solo tenga cuidado de cuán rápido la tarjeta envía los datos, tenemos un escáner de código de barras inalámbrico, y de vez en cuando lanzan las teclas al teclado para acelerar el aplicación para manejar.

también si va a distribuir su software a otros territorios, a continuación, pulsaciones de teclas pueden ser diferentes, por ejemplo en España (creo, pero puede ser Francia) la línea superior del teclado es! "£ $%^& () opuesto al 1234567890 de Estados Unidos/Reino Unido, y si su lector de tarjetas está configurado en usa/uk, entonces enviará! "£ $%^&() en lugar de 1234567890, ya que la cuña solo emula esa tecla presionada y Si Windows lo interpreta diferente, entonces es tu problema.

1

Otra votación para jttraino's idea. Hago más o menos lo mismo con los lectores de tarjetas y los lectores de cheques en los sistemas de puntos de venta donde tenemos que admitir la cuña de teclado, así como USB y RS232.

Básicamente, elija una secuencia corta de caracteres que probablemente no provenga del teclado, y programe su bucle de manejo de mensajes para ver cómo llegan estos caracteres. Si obtiene una secuencia completa de caracteres que coinciden con su patrón, puede decodificar el resto de su entrada hasta que llegue a la secuencia designada 'final', o hasta que decida que la secuencia entrante es errónea. Seleccione una cadena que sea difícil, o imposible, para ingresar desde el teclado normal a su aplicación, como elementos de edición y el comportamiento de sus diversas pantallas.

Un buen punto de partida es algo así como tilda-pling (~!) ya que es poco probable que esos caracteres aparezcan en los datos personales de alguien y no es probable que necesiten aparecer juntos en el texto de una nota, etc. :-)

La desventaja, exactamente como dijo jttraino, es que lo hará probablemente tenga que configurar/programar cada dispositivo lector en sí mismo. Algunos fabricantes lo hacen bastante fácil de hacer, ¿de qué kit está utilizando? Magtek? Welch Allyn?

3

También puede utilizar la API de entrada sin formato si conoce las ID de hardware de los dispositivos con anticipación. I blogged about this recently. Puede ser una locura, pero satisfizo mis requisitos: el objetivo principal en mi caso era poder recibir información incluso cuando la aplicación perdía el foco porque alguien accidentalmente tropezaba con algo mientras buscaba artículos en un palé. El objetivo secundario es que no pude agregar ningún personaje centinela porque eso habría quebrado las aplicaciones existentes de terceros que se utilizan con las armas de escaneo.

que he hecho el método carácter centinela antes, sin embargo, tanto a través de un KeyPress adjuntar o un gancho de teclado de bajo nivel a través de SetWindowsHookEx() oa través de KeyPreview en el formulario principal de la aplicación. Si cumple con sus requisitos, definitivamente es mucho más simple y fácil de usar ese método y con ese fin secundo las recomendaciones ya dadas.

Cuestiones relacionadas