Delphi-PRAXiS
Seite 1 von 3  1 23      

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:49 Uhr.
Seite 1 von 3  1 23      

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