2008-09-03 17 views
5

Ich schreibe ein C# POS (Point of Sale) -System, das Eingabe von einem Keyboard keil Magcard Reader. Dies bedeutet, dass alle Daten, die von einem Magnetstreifen gelesen werden, so eingegeben werden, als wären sie sehr schnell auf der Tastatur eingegeben worden. Momentan gehe ich damit um, indem ich mich an das KeyPress-Ereignis anschließe und nach einer Reihe sehr schneller Tastenbetätigungen suche, die die Wipe-Sentinel-Zeichen der Karte enthalten.Der beste Weg zur Eingabe von einer Tastatur "Keil"

Gibt es eine bessere Möglichkeit, mit dieser Art von Eingabe umzugehen?

Edit: Das Gerät präsentiert die Daten einfach als Tastenanschläge und nicht über einen anderen Treiber Schnittstelle. Wir verwenden auch eine breite Palette dieser Arten von Vorrichtungen, so dass eine Methode idealerweise unabhängig von dem spezifischen Modell des verwendeten Keils funktionieren sollte. Wenn es jedoch keine andere Option gibt, muss ich etwas tun.

Antwort

10

Eine Sache, die Sie tun können, ist, dass Sie in der Lage sein sollten, Ihren Wedge-Reader so zu konfigurieren, dass er ein oder mehrere Escape-Zeichen vor oder nach der Zeichenfolge darstellt. Du würdest diese Escape-Zeichen verwenden, um zu wissen, dass du eine Magmark-Eingabe haben wirst (oder gerade hattest).

Dieselbe Technik wird von Barcode-Lesegeräten verwendet, damit Ihre Anwendung den Fokus oder die Dateneingabe vom Gerät erhält.

Das Negative zu diesem Ansatz ist, dass Sie Ihre externen Geräte ordnungsgemäß konfigurieren müssen. Dies kann ein Bereitstellungsproblem sein.

Dies setzt voraus, dass Ihre Geräte die Daten einfach als Tastenanschläge darstellen und nicht über einen anderen Treiber verbunden sind.

0

I Sekunde @jttraino's idea.

Es ist der Weg zu Bar Scan/Codeleser und andere solche Geräte, die Plug-and-Play (PnP) sind. Ich habe die gleiche Technik verwendet, um ein paar 1D- und 2D-Barcode-Scanner in meiner früheren Aufgabe zu konfigurieren.

2

Ich denke, Sie behandeln es in einer akzeptablen Weise, nur vorsichtig sein, wie schnell die Karte die Daten sendet, wir haben drahtlose Barcode-Scanner, und hin und wieder werfen sie die Tastenanschläge auf der Tastatur zu schnell für die Anwendung zu handhaben.

Auch wenn Sie Ihre Software auf andere Territorien vertreiben, dann können Schlüsselstrokes anders sein, zum Beispiel in Spanien (ich denke, aber vielleicht Frankreich) ist die oberste Zeile der Tastatur! "£ $%^& () im Gegensatz zu den USA/UK 1234567890, und wenn Ihr Kartenleser auf USA/Großbritannien eingestellt ist, wird es senden! "£ $%^&() anstelle von 1234567890, wie der Keil nur emuliert, die Taste gedrückt und Wenn Windows es anders interpretiert, dann ist es dein Problem.

1

Eine andere Abstimmung für jttraino's idea. Ähnliches gilt für Kartenleser und Scheckleser in Point-of-Sale-Systemen, bei denen Tastaturkeil sowie USB und RS232 unterstützt werden müssen.

Wählen Sie im Prinzip eine kurze Folge von Zeichen, die wahrscheinlich nicht von der Tastatur kommen, und programmieren Sie Ihre Nachrichtenverarbeitungsschleife, um diese Zeichen ankommen zu sehen. Wenn Sie einen vollständigen Zeichenstrom erhalten, der mit Ihrem Muster übereinstimmt, können Sie den Rest Ihrer Eingabe dekodieren, bis Sie die festgelegte Endsequenz oder bis Sie die eingehende Sequenz falsch bestimmen. Wählen Sie eine Zeichenfolge aus, die entweder schwierig oder unmöglich ist und über die normale Tastatur in Ihre App eingegeben werden kann, z. B. für Bearbeitungsmasken und das Verhalten der verschiedenen Bildschirme.

Ein guter Ausgangspunkt ist etwas wie Tilda-Pfling (~!) da diese Charaktere nicht in persönlichen Details erscheinen und wahrscheinlich nie zusammen im Text einer Notiz erscheinen müssen, usw. :-)

Der Nachteil, genau wie jttraino sagte, ist, dass Sie es werden Wahrscheinlich muss jedes Lesegerät selbst konfiguriert/programmiert werden. Manche Hersteller machen das relativ einfach - wessen Kit verwendest du? Magtek? Welch Allyn?

3

Sie können auch die Raw-Input-API verwenden, wenn Sie die Hardware-IDs der Geräte im Voraus kennen. I blogged about this recently. Es mag wahnsinnig sein, aber es erfüllte meine Anforderung: Das primäre Ziel in meinem Fall war es, Eingaben zu erhalten, selbst wenn die Anwendung den Fokus verlor, weil jemand versehentlich etwas rammte, um Gegenstände auf einer Palette zu scannen. Das sekundäre Ziel ist, dass ich keine Sentinel-Zeichen hinzufügen konnte, da dies die bestehenden Anwendungen von Drittanbietern, die mit den Scan-Guns verwendet werden, durchbrochen hätte.

Ich habe vor dem Sentinel-Zeichen Methode durchgeführt, jedoch sowohl über eine KeyPress anhängen oder eine Low-Level-Tastatur-Hook über SetWindowsHookEx() oder über KeyPreview auf Hauptformular Ihrer Anwendung. Wenn es Ihren Anforderungen entspricht, ist es definitiv viel einfacher und einfacher, diese Methode zu verwenden, und zu diesem Zweck stimme ich den bereits gegebenen Empfehlungen zu.

Verwandte Themen