Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi HID (von Robert Marquardt) und USB-Barcodescanner (https://www.delphipraxis.net/27377-hid-von-robert-marquardt-und-usb-barcodescanner.html)

Poolspieler 9. Aug 2004 10:07


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

Hansa 9. Aug 2004 11:10

Re: HID (von Robert Marquardt) und USB-Barcodescanner
 
Zitat:

Zitat von Poolspieler
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.

Das ist genauso zu behandeln wie ein Tastaturereignis. Also im OnKeyPress. Es sei denn es ist ein serieller Scanner.

Poolspieler 9. Aug 2004 11:15

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

Hansa 9. Aug 2004 11:30

Re: HID (von Robert Marquardt) und USB-Barcodescanner
 
Zitat:

Zitat von Poolspieler
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,...

Der steht woanders und wird von jemand anderem benutzt ? :shock: Und dein Programm erhält von jemand anderem kryptische Zeichen ? Tut mir leid, aber damit kann ich nichts anfangen.

StTüff 9. Aug 2004 11:35

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

Hansa 9. Aug 2004 11:45

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 ?

StTüff 9. Aug 2004 11:52

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

Poolspieler 9. Aug 2004 11:53

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

Robert Marquardt 9. Aug 2004 11:54

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.

Poolspieler 9. Aug 2004 11:56

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

Poolspieler 9. Aug 2004 12:00

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

Robert Marquardt 9. Aug 2004 12:02

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.

StTüff 9. Aug 2004 12:03

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

Poolspieler 9. Aug 2004 12:08

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

StTüff 9. Aug 2004 12:08

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

Poolspieler 9. Aug 2004 12:10

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

Hansa 9. Aug 2004 12:17

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.

Nikolas 9. Aug 2004 12:22

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.

Poolspieler 9. Aug 2004 12:23

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

Hansa 9. Aug 2004 12:27

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.

Robert Marquardt 9. Aug 2004 15:59

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.

Poolspieler 9. Aug 2004 16:03

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

Poolspieler 9. Aug 2004 16:07

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

Robert Marquardt 9. Aug 2004 16:13

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