Frage

Ich schreibe ein C#-POS-System (Point of Sale), das Eingaben von einem Tastatur-Wedge-Magnetkartenleser entgegennimmt.Das bedeutet, dass alle von einem Magnetstreifen abgelesenen Daten so eingegeben werden, als ob sie sehr schnell auf der Tastatur getippt würden.Momentan bewältige ich das, indem ich eine Verbindung zum KeyPress-Ereignis herstelle und nach einer Reihe sehr schneller Tastendrücke suche, die die Card-Swipe-Sentinel-Zeichen enthalten.

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

Bearbeiten:Das Gerät stellt die Daten einfach als Tastenanschläge dar und stellt keine Schnittstelle über einen anderen Treiber her.Außerdem verwenden wir ein breites Spektrum dieser Gerätetypen, daher sollte eine Methode idealerweise unabhängig vom verwendeten Keilmodell funktionieren.Wenn es jedoch keine andere Möglichkeit gibt, muss ich mich damit begnügen.

War es hilfreich?

Lösung

Eine Sache, die Sie tun können, ist, dass Sie Ihren Wedge-Reader so konfigurieren können, dass er ein oder mehrere Escape-Zeichen vor oder nach der Zeichenfolge anzeigt.Sie würden diese Escape-Zeichen verwenden, um zu wissen, dass Sie kurz vor einer Magcard-Eingabe stehen (oder gerade eine solche hatten).

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

Der Nachteil dieses Ansatzes besteht darin, 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 kommunizieren.

Andere Tipps

Sie können auch die Raw Input API verwenden, wenn Sie die Hardware-IDs der Geräte im Voraus kennen. Ich habe kürzlich darüber gebloggt. Es mag verrückt sein, aber es hat meine Anforderung erfüllt:In meinem Fall bestand das Hauptziel darin, Eingaben auch dann empfangen zu können, wenn die Anwendung den Fokus verlor, weil jemand versehentlich gegen etwas gestoßen ist, während er herumstöberte, um Artikel auf einer Palette zu scannen.Das sekundäre Ziel besteht darin, dass ich keine Sentinel-Zeichen hinzufügen konnte, da dies die Verwendung bestehender Drittanbieteranwendungen mit den Scanpistolen beeinträchtigt hätte.

Ich habe die Sentinel-Charaktermethode schon einmal gemacht, allerdings beide über a KeyPress Befestigen oder einen niedrigen Tastaturhaken über SetWindowsHookEx() oder über KeyPreview auf dem Hauptformular Ihrer Bewerbung.Wenn es Ihren Anforderungen entspricht, ist es definitiv viel einfacher und einfacher, diese Methode zu verwenden, und in diesem Sinne schließe ich mich den bereits gegebenen Empfehlungen an.

Ich denke, Sie handhaben es in akzeptabler Weise. Achten Sie nur darauf, wie schnell die Karte die Daten sendet. Wir haben drahtlose Barcodescanner, und ab und zu werden die Tastenanschläge zu schnell auf die Tastatur übertragen, als dass die Anwendung sie verarbeiten könnte.

Auch wenn Sie Ihre Software in andere Gebiete vertreiben, können die Tastenanschläge anders sein, zum Beispiel in Spanien (ich glaube, aber vielleicht auch Frankreich) ist die oberste Zeile der Tastatur !"£$%^&() im Gegensatz zu USA/UK 1234567890, und wenn Ihr Kartenleser auf USA/UK eingestellt ist, sendet es !"£$%^&() anstelle von 1234567890, da der Wedge nur die gedrückte Taste emuliert und wenn Windows sie anders interpretiert, liegt das an Ihrem Problem.

Noch eine Stimme dafür jttrainos Idee.Das Gleiche mache ich mit Karten- und Schecklesern in Kassensystemen, bei denen wir Tastaturweiche sowie USB und RS232 unterstützen müssen.

Wählen Sie grundsätzlich eine kurze Folge von Zeichen, die wahrscheinlich nicht von der Tastatur kommen, und programmieren Sie Ihre Nachrichtenverarbeitungsschleife so, dass diese Zeichen eintreffen.Wenn Sie einen vollständigen Zeichenstrom erhalten, der Ihrem Muster entspricht, können Sie den Rest Ihrer Eingabe dekodieren, bis Sie die festgelegte „End“-Sequenz erreichen oder bis Sie feststellen, dass die eingehende Sequenz fehlerhaft ist.Wählen Sie eine Zeichenfolge aus, die aufgrund von Dingen wie Bearbeitungsmasken und dem Verhalten Ihrer verschiedenen Bildschirme entweder nur schwer oder gar nicht über die normale Tastatur in Ihre App eingegeben werden kann.

Ein guter Ausgangspunkt ist so etwas wie Tilda-Pling (~!), da diese Zeichen wahrscheinlich nicht in den persönlichen Daten von irgendjemandem auftauchen und auch nie zusammen im Text einer Notiz usw. auftauchen müssen.:-)

Der Nachteil besteht, genau wie jttraino sagte, darin, dass Sie wahrscheinlich jedes Lesegerät selbst konfigurieren/programmieren müssen.Bei einigen Herstellern ist dies ziemlich einfach. Welches Kit verwenden Sie?Magtek?Welch Allyn?

Ich stimme zu @jttrainos Idee.

Dies ist die richtige Lösung für Barcode-/Codeleser und andere Plug-and-Play-Geräte (PnP).Ich habe in meiner vorherigen Aufgabe dieselbe Technik verwendet, um einige 1D- und 2D-Barcodescanner zu konfigurieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top