2009-08-22 5 views
7

Ich habe eine "Symbol" Marke Barcode-Scanner (USB) und ich versuche, die Daten erfassen es scannt von einem Barcode in meine Anwendung (die als Dienst ausgeführt wird - mit Nein Textboxsteuerung, natürlich)."Symbol" Marke Barcode-Scanner und C#

Der Catch ist, dass: Immer wenn Sie etwas scannen, fungiert es wie eine Tastatur und gibt die Ziffern zu allem, das Fokus hat (d. H. Notizblock, Wort, usw.).

Meine Frage ist: Wie führe ich diesen Barcode Scan im Hintergrund aus und stelle ihn in eine Variable, die ich in meinem C# benutzen kann.

Bis jetzt sind die einzigen API, die ich gefunden habe, für die .NET CF und ich brauche dies ein Windows-Dienst.


Grundsätzlich möchte ich auf eine Anwendung bestimmte Tastatureingaben senden können, wenn der Barcode = „123.456.789-0.111“ ohne mit dem aktuellen Fenster zu stören, die den Fokus hat. Nachdem meine Anwendung den Barcode eingelesen hat, wird nach einem bestimmten Programm gesucht (Start und Fokus) und Tastenanschläge gesendet. Ich verwende Code 128.

+1

Können Sie uns mehr Informationen über den Kontext geben, warum es ** ein Windows-Dienst sein muss **? –

+0

Ich dachte, es müsste ein Windows-Dienst sein, weil ich die Daten aus dem Barcodescanner * die ganze Zeit überwachen muss. Grundsätzlich möchte ich bestimmte Tastenanschläge an eine Anwendung senden können, wenn der Barcode zB "123456789-0111" ist. –

+0

Es könnte auch in der Taskleiste sein. –

Antwort

0

Der Scanner ist als HID (Human Interface Device) konfiguriert und emuliert Tastatur. Um über die API von Symbol darauf zuzugreifen, müssen Sie wahrscheinlich den aktuellen Kommunikationsmodus deaktivieren und auf den nativen Modus einstellen - dies sollte im Scanner-Handbuch dokumentiert werden. Dann können Sie direkt ohne Eingabefeld darauf zugreifen.

PS. Ich habe keinen Symbol-Scanner, aber das ist bei vielen Geräten üblich.

+0

Das einzige Problem bei diesem Ansatz ist, dass sie dieselben Scanner verwenden, um andere Barcodes zu scannen, so dass sie immer auf den aktiven Kommunikationsmodus eingestellt sein müssen. –

0

Es hängt wirklich von der API des Strichcodescanners ab, und das ist spezifisch für den Verkäufer. Sie müssen die api für den Scanner vom Anbieter erhalten, wenn Sie es nicht auf ihrer Website finden können, sollten Sie einfach ihren Support per E-Mail senden, obwohl Sie möglicherweise feststellen müssen, dass Sie die API kaufen müssen.

+0

Bisher ist die einzige API, die sie haben, für die CF. –

0

Zuerst ..

Ignorieren Sie die Informationen .NET CF jetzt, da es wahrscheinlich auf die tatsächliche Handgerät gehört. Die Betriebsart, die vorgibt, eine Tastatur zu sein, wird klassisch als "Tastaturkeil" bezeichnet.

Zweite ..

Welche Art von Barcode-Symbologien versuchen Sie zu verwenden? Und für welche Zwecke? Oder, genauer gesagt ... Wie sehen die Barcodes beim Scannen aus? (Haben sie besondere Vorder- und Hinter Zeichen enthalten?)

Third ... halten Sie es einfach ... vermeiden, dass die API, wenn es notwendig ist ...

In der Vergangenheit, als ich mit hatte Schnittstelle Barcodescanner, ich habe einen sehr einfachen Ansatz verwendet, da mein Dateneingabeformular die Eigenschaft von KeyPreview true hat und eine Methode zum Erkennen und zur direkten Eingabe von vom Scanner stammenden Eingaben (durch Untersuchung von Anfangs- und Nachlaufzeichen) an das entsprechende Steuerelement enthält. Die meisten Scanner, mit denen ich zu tun hatte, waren programmierbar (normalerweise über Barcodes), um einen benutzerdefinierten Satz von Zeichen zu übergeben, um Anfang und Ende der gescannten Eingabe zu signalisieren.

Ich hoffe, das hilft ....

+0

1) Code 128 2) Zweck ist für ein Krankenhaus, schnell durch bestimmte Bildschirme zu navigieren. 3) Es liegt an mir, ob sie spezielle führende und nachfolgende Zeichen enthalten sollen. Jeder Klinik wird ein Barcode zugewiesen, den ich erhalte. –

+0

Sieht aus, als ob Ihr Programm die Dateneingabe basierend auf einer Papierform oder einem Etikett durchführt. Wahrscheinlich Labor oder Gebühren. Ich vermute, dass der oben beschriebene Ansatz wahrscheinlich funktionieren wird. – CMB

+0

Mit anderen Worten ... halten Sie es so einfach wie möglich .... – CMB

2

Die HID-Modus wird Ihre beste am besten.

Setzen Sie den Barcodeleser in den HID-Modus und lassen Sie Ihren Service den Leser erfassen. Wenn Daten eintreffen, schauen Sie sie sich an und wenn es einer Ihrer speziellen Barcodes ist, können Sie darauf reagieren.

Wenn die Daten nicht einer Ihrer speziellen Barcodes sind, dann injizieren Sie sie als Keydown/Keyup Windows-Nachrichten, so dass es auf die gleiche Weise wie im Tastaturemulationsmodus zu funktionieren scheint.

+0

+1, wenn Sie den HID-Modus erklären. Ich machte eine schnelle Google, aber kam mit Sachen um Bluetooth. Steht es für "Human Interface Device"? –

+0

Ja, HID = Human Interface Device. –

+0

Genau so gehe ich in einer meiner kommerziellen Apps damit um. Der Handheld-Scanner wird als eigenes HID angezeigt, also haken Sie einfach in seine Tastenanschläge über Windows-API ein und überwachen Sie den Monitor! – Sk93

2
  1. Den Scanner in den USB-Modus versetzen. Dies geschieht in der Regel durch Scannen einer Reihe von Barcodes in Ihrem Handbuch oder durch Ausdrucken von der Software, die von dem Symbol bereitgestellt wird.

  2. Mit dem Scanner angeschlossen/angedockt Verbindung zu Windows Update. Sie erhalten ein spezifisches Update für diesen Scanner. Es funktioniert nicht, wenn der Scanner nicht eingesteckt ist.

  3. Der Scanner sollte einem COM-Port zugeordnet werden. Dies war normalerweise com 2 auf den Maschinen, auf denen ich es eingerichtet habe.

  4. Download JustinIO. Für meinen Scanner, nützliche COM-Einstellungen: Baudrate: 9600, ByteSize 8, StopBits: 1 Parität: 0

  5. Erstellen Sie eine neue CommPort-Instanz. Stellen Sie einen Faden auf, der etwas tut, wie:


StringBuilder sb; 
byte[] b; 
do 
{ 
    b = commPort.Read(1); 
    sb.Append(Encoding.ASCII.GetChars(b)); 
    Thread.Sleep(20); //symbol is slow... 
} while(b.Length > 0); 

Hinweis: so viel ist knirschte nach unten aus dem Code, den ich verwende eigentlich so müssen Sie es für Ihre Anwendung ändern.

  1. Senden Sie die Zeichenfolge an Ihre Anwendung über die jeweils geeignete Methode. Hier
+0

Ich kann den Code nicht richtig formatieren, sorry. :( –

+0

Seltsam. Ich habe versucht, es für Sie zu formatieren, aber ich kann es auch nicht funktionieren. Muss mit Teil einer nummerierten Liste zu tun haben. – MusiGenesis

+0

hackte es mit einer Linie ... ???? –

0

ist ein Codeproject Beispiel, das demonstriert, wie die globale Maus und Tastatur Haken in C# einzurichten:

http://www.codeproject.com/KB/cs/globalhook.aspx

Sie können diesen Code auf Ihre Konsole-Anwendung hinzufügen und dann überwachen Sie einfach alle Tastatur Eingabe, suchen Sie nach den spezifischen Codes, die Sie benötigen. Keine API Aufregung oder Muss.