![]() |
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:49 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