![]() |
HID (von Robert Marquardt) und USB-Barcodescanner
Hallo,
ich benutze einen Barcodescanner (USB). Folgendes würde ich gern realisieren: Wenn der Scanner ein zeichen liest, soll ein Ereignis aufgerufen werden, welches das Zeichen verarbeitet. Das Zeichen soll (im Idealfall) aber nicht an die Anwendung geschickt werden. Mit der HIDKomponente von dem Robert habe ich es ausprobiert. Ich sehe zwar das HID-Interface, kann auch ein CheckOut machen. HasReadWriteAccess ist aber false :cry: Und wenn ich die Hilfe richtig verstanden habe, wird das OnData-Ereignis NUR aufgerufen, wenn HasReadWriteAccess true ist. --> Was kann ich jetzt machen :shock: Wäre schön, wenn mir jemand helfen könnte, bin grade am Verzweifeln Gruß Poolspieler |
Re: HID (von Robert Marquardt) und USB-Barcodescanner
Zitat:
|
Re: HID (von Robert Marquardt) und USB-Barcodescanner
Hallo,
das habe ich auch schon ausprobiert, doch da gibt es ein riesen Problem: Da meine Anwendung ja sowohl den Benutzer vor dem PC, als auch den Barcodeleser (der wo anders steht und von wem anderem benutzt wird) bedienen soll, kann es vorkommen, dass während des Scanvorgangs der Benutzer vor dem PC Text eingiebt. Und genau dann kommt es zu irgendwelchen Kryptischen Zeichen, weil wahrscheinlich die Scancodes der Tastatur mit dem Scancode des Barcodescanners "vermischt" wird. Und diesen Fehler kann ich nicht abfangen - ich weiß zumindest nicht wie... :cry: Ich hätte im Barcode halt am anfang und am Ende eine Tilde~ eingebaut und im OnKeyDown-Ereignis darauf abgefragt, aber wie gesagt, wenn Kryptische Zeichen kommen ist das Sinnlos... Gruß Poolspieler |
Re: HID (von Robert Marquardt) und USB-Barcodescanner
Zitat:
|
Re: HID (von Robert Marquardt) und USB-Barcodescanner
Naja, ich kann mir das schon vorstellen. Der Rechner wird sozusagen im "Multiuserbetrieb" verwendet.
Stimmt doch so, oder? So ein Problem in der Art habe ich auch. Der PC wird nur als Interface benutzt, um Seriennummern elektronisch in einem Gerät zu speichern. Das funktioniert (momentaner Stand) halt nur, wenn das Programm den "Focus" hat.... Ich denke, die Probleme sind ähnlich. Gruß, StTüff |
Re: HID (von Robert Marquardt) und USB-Barcodescanner
Multiuser ist was anderes. Das da ist, wenn schon dann Multi-Program-User Betrieb. Woher soll nun das arme Programm wissen, was getan werden muß :?: Das ist so ähnlich, als wollten 2 Leute eine Tür aufschließen, der eine von innen und der andere von außen. 8) Das wird nicht viel. Was z.B. wenn der "Tastatur-User" aus Versehen eine ~ eingibt ?
Wie wäre es denn mal alternativ über Multitasking nachzudenken. Das Programm also ganz einfach in 2 Instanzen laufen zu lassen ? |
Re: HID (von Robert Marquardt) und USB-Barcodescanner
Mutitasking wird nichts.... Da trotzdem die Windowsnachrichten nur an das aktive Programm
(das das halt momentan den Focus hat) weiterleitet. Wenn Dann müssten schon eher die Tastatureingaben Systemglobal abgefangen werden. Der Ansatz mit Start- und End-Code ist schon der richtige (dafür ist dieses Feature ja schließlich bei den Scannern eingebaut). Also: Die Lösung ist, die Tastatureingaben mit einem Hook global abzufangen und auszuwerten. Das geht dann auch, wenn das Programm im Hintergrund, oder als Dienst arbeitet. Ich hab's zwar noch nicht ausprobiert, bin mir aber ziwmlich sicher, dass es so geht. Gruß, StTüff |
Re: HID (von Robert Marquardt) und USB-Barcodescanner
Hi,
wenn der User aus Versehen eine ~ eingiebt ist nicht sooo schlimm, weil: sobald die erste Tilde eingegeben wurde, merke ich mir diesen Zeitpunkt. Für die nächsten z.B. 500 Millisekunden gehe ich davon aus, das Daten vom Scanner kommen. Wenn wirklich Daten vom Scanner kommen, muss innerhalb von 500 Millisekunden eine weitere Tilde kommen. Außerdem muss die Anzahl der Zeichen zwischen den beiden Tilden stimmen... Zum zwei Instanzen: Das löst mein Problem nicht im geringsten, weil: Normalerweise kommt vom Scanner z.B. folgendes: ~text1234~ Im Fehlerfall (bei gleichzeitiger Eingabe von Text durch den Benutzer): ~tex►123~ Egal, ob ich mit einem, oder mehreren Threads arbeite, der Müll, der vom Scanner (bzw. der Tastatur) kommt, bleibt Müll. Die einzige Alternative, die ich sehe: Ich müßte irgendwie NUR die Daten des Scanners herausfiltern können, noch bevor sie über den Tastaturtreiber geschickt werden. Aber da bin ich irgendwie zu dämlich dafür :cry: :arrow: Aber vielleicht gibt es hier ja einen schlauen Kopf, der mir sein Wissen leiht :stupid: Gruß Poolspieler |
Re: HID (von Robert Marquardt) und USB-Barcodescanner
Barcodescanner sind fast ausschliesslich als HID-Tastaturen implementiert.
Tastaturen (und Maeuse) aber werden von Windows als System-Geraete verstanden, auf die nur Windows selbst Zugriff haben darf. Windows setzt also einen CreateFile-Aufruf mit Exklusiv-Zugriff ab. Damit sind alle anderen CreateFile-Aufrufe blockiert, sofern sie Lese- oder Schreibrechte wollen. Leider kann man eine HID-Tastatur nur mit ReadFile lesen. |
Re: HID (von Robert Marquardt) und USB-Barcodescanner
Hallo StTüff,
das mit dem Hook hätte aber noch einen Haken: So weit ich weiß, kann man zwar die Daten abfangen, aber NICHT ändern, was bedeuten würde, dass die Daten trotzdem an die Anwendung geschickt würden, die gerade den Focus hat. Des weiteren gilt halt noch obiges beschriebenes Problem (mit dem Datenmüll) Gruß Poolspieler |
Re: HID (von Robert Marquardt) und USB-Barcodescanner
Hallo Robert,
leider habe ich Deine Antwort nicht ganz verstanden: Kann ich mit Deiner Komponente das HID bedienen, oder nicht? Und wenn ja: Wie bekomme ich dann die Daten vom HID in meine Anwendung (am besten per Ereignis)? Gruß und schon mal danke Poolspieler |
Re: HID (von Robert Marquardt) und USB-Barcodescanner
Wenn die Daten nur fuer ein bestimmtes Programm bestimmt sind dann kann man doch einfach die Keyboard-Messages im Programm filtern. Da ist kein Hook noetig.
Das Problem mit vom User eingegebenen Tasten sollte man ignorieren. Ich sehe da keine grosse Gefahr. Die Treiberebene (HID-Geraet) laesst sich nicht zugreifen und die Messages von verschiedenen Treibern sind leider nicht markiert obwohl das moeglich waere. Es wurde aber in Windows nicht implementiert. |
Re: HID (von Robert Marquardt) und USB-Barcodescanner
Ich bin mir nicht sicher, ob man die Daten ändern kann, aber die Weitergabe
an das aktive Fenster kann verhindert werden. Allerdings stimmt es, dass es ein Problem geben wird, wenn (fast) gleichzeitig verschiedene Eingaben erfolgen. Vielleicht ist es doch einfacher, auf einen Scanner auszuweichen, der an die RS 232-Schnittstelle angeschlossen wird. Das kann man dann recht einfach Auswerten. ODER: Gibt es eine Message, die die Herkunft des übermittelten Zeichens angiebt? StTüff |
Re: HID (von Robert Marquardt) und USB-Barcodescanner
Hallo,
da das an der Anwendung ein(e) Telefonist(in) sitzen wird, die Gespräche annimmt, ist eine gewisse Gefahr schon vorhanden :| Ich könnte natürlich hergehen und den Barcodebediener zumuten, jeden Barcode zweimal zu scannen und über eine optische Anzeige (z.B. LED über Serielle Schnittstelle, oder gar Dot-Matrix) anzeigen, ob der Scanvorgang erfolgreich war... Dann habe ich zwar das Problem von zusätzlicher Hardware und einem "verschwendetem" seriellem Port, aber naja, man kann ja nicht alles haben... :cyclops: Gruß und vielen Dank für eure Antworten Poolspieler |
Re: HID (von Robert Marquardt) und USB-Barcodescanner
@Robert Marquardt
Das Geht aber nur, wenn das Programm den Focus hat und nicht gleichzeitig mit einem andern Programm (z.B. Word) gearbeitet wird (Sonst kommt die Eingabe vom Scanner bei Word raus...). Deshalb muss das (unser) Programm im Hintergrund "mitlauschen" und die Eingabe vom Scanner abfangen. Ich sollte jetzt mal wieder weiterarbeiten. Schau später noch mal rein. Gruß, StTüff |
Re: HID (von Robert Marquardt) und USB-Barcodescanner
Hi,
wegen RS232-Scanner: Ich wollte die serielle/parallele Schnittstelle meiden, da diese langfristig gesehen abgeschafft werden... (Außerdem habe ich den USB-Scanner schon gekauft... :roll: ) Auch mein Lösungsvorschlag oben mit der optischen Anzeige über serielle Schnittstelle ist deshalb alles andere als optimal... Poolspieler |
Re: HID (von Robert Marquardt) und USB-Barcodescanner
Hast du da eventuell etwas übersehen ? :gruebel: Sofern Tastatur Tastatur ist und die anderen Eingaben seriell kommen, so kannst du wunderbar eine Entscheidung treffen, um was es sich handelt.
|
Re: HID (von Robert Marquardt) und USB-Barcodescanner
Kannst du den Scanner nicht motivieren, den gescannten Text mehrmals zu übermitteln. Wenn er ihn 3-4 mal sendet kannst du recht schnell einen Fehler erkennen und ihn auch noch verbessern.
|
Re: HID (von Robert Marquardt) und USB-Barcodescanner
Hallo,
nein, das habe ich nicht übersehen, aber mein Gedanke war eben folgender: Langfristig gesehen wird es die serielle schnittstelle nicht mehr all zu lang geben. Die neue Laptops haben schon teilweise keine mehr. Deshalb wollte ich es mit einem USB-Scanner (den ich ja bereits gekauft habe) realisieren. Dass es dabei NUR Probleme gibt, wusste ich vorher natürlich nicht. Außerdem scheinen diese RS232-Scanner recht selten zu sein... Eine Echte Abhilfe wäre es, wenn ich eines einen Treiber gäbe, der aus dem HID-Gerät einen virtuellen COM-Port machen würde - sowas habe ich aber noch nicht gefunden --> würde sogar Geld dafür ausgeben... Gruß Poolspieler |
Re: HID (von Robert Marquardt) und USB-Barcodescanner
Serielle Scanner sind schon seltener, vor allem aber auch teurer. Dafür funktionieren sie IMHO besser. Daß die serielle Schnittstelle verschwindet, das wird so schnell nicht passieren. Notfalls muß man sie halt nachrüsten.
|
Re: HID (von Robert Marquardt) und USB-Barcodescanner
Versuch mal einen Barcodeleser zu bekommen der sich als HID-Barcodeleser meldet.
Ich glaube da gibt es welche. Teilweise lassen sie sich sogar umschalten von Keyboard- auf HID-Barcode-Geraet. Solche Barcodeleser sollten sich mit meiner HID-Komponente problemlos lesen lassen. |
Re: HID (von Robert Marquardt) und USB-Barcodescanner
Hallo,
ich komme (langsam) der Lösung meines Problems näher. Zusammenfassung: 1. Direkt über HID (Human Interface Device) den Scanner auslesen geht anscheinend nicht :cry: 2. Das Problem mit dem Datenmüll, wenn man gleichzeitig etwas über die Tastur eingiebt, während man Scannt, liegt am Scanner! Ich habe einen Jarltech 2009U. --> Wenn ich die Tastatur (im Scanner) auf Deutsch umstelle, dann treten diese Probleme mit dem Datenmüll auf. --> lasse ich hingegen die Einstellung auf US-Tastatur, dann kommt es zu KEINEM Datenmüll. Die von der Tastatur (von Hand) eingegebenen Zeichen während des Scanvorgangs werden lediglich zusätzlich mit ausgegeben, wie man es halt erwarten würde. z.B.: Gescannte Daten (soll): ~123~ eingegebenes Zeichen: a Ergebnis ~1a23~ Das bedeutet: Ich kann jetzt nach Tilde ausschau halten. Wenn zwei Tilden mit z.B. drei Zeichen dazwischen innerhalb von z.B. 500 ms kommen, so kann ich (fast 100%ig) davon ausgehen, dass die Daten vom Scanner kommen. --> Ich denke, mit dieser Lösung kann ich leben. Wer noch bessere Vorschläge hat (die mit einem USB-Scanner machbar sind) --> bin für alles offen :wink: Gruß Poolspieler |
Re: HID (von Robert Marquardt) und USB-Barcodescanner
Nun,
eines verstehe ich bei diesem Scanner NICHT (bin wahrscheinlich zu dämlich :? ) In den Systemeinstellungen (im Scanner) kann ich folgendes einstellen - RS-232C - PC/AT - USB - WAND EMULATION Es ist aber nicht beschrieben, was diese Einstellungen bewirken...??? Vielleicht ist ja nur die selbe Firmware für verschiedene Barcodlesertypen implementiert...??? Ich hab auf jeden Fall schon alle Typen ausprobiert und z.B. bei RS232 gehofft, dass im Gerätemanager ein zusätzlicher Comport auftauch - war natürlich nicht so :x Der Scanner taucht als USB-HID im Gerätemanager auf... Gruß Poolspieler |
Re: HID (von Robert Marquardt) und USB-Barcodescanner
Die Firmware des Scanners ist vermutlich auf mehrere Anschlussmoeglichkeiten eingerichtet.
Nur die Kabel sind nicht nach aussen gefuehrt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz