Lesen von USB-HID-barcode-scanner-Eingang, ohne zu wissen, VID&PID

Ich versuche zu entwickeln, Geräte-unabhängige Bibliothek für Strichcode-Scanner, es hat zu funktionieren in windows-Umgebung.

Ich habe getan, einige der Forschung in diesem Bereich, afaik sind die meisten Lösungen für dieses problem sind abhängig vom spezifischen Gerät VID&PID (RawInput @ filter von vid&pid-string), in meiner situation ist dies inakzeptabel, weil ich versuche zu entwickeln, die eine geräteunabhängige Lösung, die arbeiten werden mit einem USB-barcode-scanner.

Tatsächlich dieses Ding ist ziemlich schwierig, für mich wenigstens, sind hier genau requiriments. Auch ich kann nicht Fragen Sie den Benutzer, hot-plug-Gerät (in diesem Fall ich, konnte ich nur erkennen das angeschlossene Gerät und extrahieren Sie es in der vid/pid). Auch kann ich nicht verwenden VID&PID-Datenbank von Geräten. Im Allgemeinen kann ich nicht verwenden vid&pid eigentlich gar.

Auch ich kann nicht in irgendeiner Weise reprogramm barcode-scanner, es sei denn, es geschieht aus meinem programm (vielleicht kann ich senden einige barcodescanner-spezifische IOCTLs, die machen es die Antwort für mich?).

Derzeit werde ich vorgeschlagene Lösung in dieser Frage:
Das Lesen eines Barcodes mit einem USB-barcode-scanner zusammen mit ignorieren Tastatur Daten eingeben, während scanner-Produkt-id und vendor-id sind nicht bekannt

Außerdem habe ich gesehen, kommerzielle Bibliothek (die ist nur und kommt ohne Quellen und eine info darüber, wie es implementiert ist, aber wenn man bedenkt Sie hatte einige Wort "Performance counter" in Ihren changelogs, ich denke, Sie verwendet die Lösung in dem link oben), der wird diese Funktionalität implementiert, aber es funktioniert nicht in x64-Systemen. Wahrscheinlich entweder, weil der chaotisch-code oder beacause es verwendet wahrscheinlich irgendeine Art von filter (mini -) Fahrer. Es ist verschlüsselt und ich kann Sie nicht weiterverbreiten.

Meine genaue Frage ist:
Gibt es eine Möglichkeit zu bestimmen, dass das HID-Tastatur ist in der Tat nicht eine Tastatur, sondern einen barcode-scanner? Ich habe gesehen, auf der Win 7 x64, die es verbindet, wie Barcode-scanner, Tastatur nicht (dies war ein system Fehler, oder irgendwie so).

Genau das, was ich jetzt mache:

  1. Lesen Eingabe von RID_INPUTSINK.
  2. Unterscheidung alle Eingaben von vid&pid-Gerät
  3. Dass alle input-separate Puffer und sammeln von barcodes aus dem Puffer, wenn VK_ENTER zeigt auf Puffer.

Was ich gerade tun:

  1. Eingang Lesen von RID_INPUTSINK
  2. Start-timer für bestimmte Geräte und wenn das nächste symbol ist VK_ENTER - stop-timer
  3. Wenn der timer mehr als 50 ms limit - off es und löschen Sie alle weiteren Geräte-Eingang.
  4. Wenn das Gerät erfolgreich ausgelesen Folge von Zeichen aus dem ersten symbol zu VK_ENTER - Extrakt-Gerät VID&PID/Griff und mit ihm zu arbeiten in bequemer Weise (ohne timering).

Ich bin developng auf C++, Reine WinAPI, es wird eine DLL-Bibliothek, und machte sich an die Arbeit, die in Windows XP, Vista, 7, 8 auf x32-86 und x32-64-Architekturen.

UPDATE 0:
Gerade festgestellt, dass die barcode-scanner haben Ihre eigenen usagePage und-Verwendung in USB-Spezifikt.:
http://www.usb.org/developers/devclass_docs/pos1_02.pdf

Entsprechend diesem Dokument USB-Barcode-scanner haben UsagePage 0x8C und Nutzung 0x02. Leider habe ich versäumt Sie es als RAWINPUTDEVICE.dwUsage und RAWINPUTDEVICE.dwUsagePage. Wahrscheinlich, weil system installieren Sie die usb-Tastatur-Treiber drauf und im user-Modus ist es nicht von realen usb-Tastatur. Wahrscheinlich werden diese Werte nutzbar im kernelmode Umgebung (eine der Optionen ist die Entwicklung von hid filter driver).

InformationsquelleAutor Ivan0x32 | 2012-09-19
Schreibe einen Kommentar