La lecture USB HID scanner de code à barres d'entrée sans savoir VID&PID

Je suis en train de développer appareil indépendant de la bibliothèque pour les scanners de codes à barres, il doit travailler dans l'environnement windows.

J'ai fait quelques recherches dans ce domaine, autant que je sache, la plupart des solutions de ce problème sont, en fonction de l'appareil VID&PID (RawInput @ filtrer par vid&pid chaîne), dans ma situation, c'est inacceptable, parce que je suis en train de développer un appareil indépendant de la solution qui sera de travailler avec n'importe quel port USB-scanner de code à barres.

En fait, cette chose est assez difficile, pour moi au moins, ici, sont exactes requiriments. Aussi je ne peux pas demander à l'utilisateur d'enfichage à chaud des périphériques (dans ce cas, j'ai viens de détecter l'appareil branché et il extrait vid/pid). Aussi je ne peux pas utiliser VID&PID de la base de données de périphériques. En général, je ne peux pas utiliser vid&pid du tout, en fait.

Aussi je ne peux pas en aucune façon reprogrammer scanner de code à barres, sauf si c'est fait à partir de mon programme (peut-être que je peux envoyer de l'barcodescanner-IOCTLs spécifiques, ce qui va rendre réponse à moi?).

Actuellement, je vais utiliser la solution proposée dans cette question:
La lecture d'un code-barres à l'aide d'un USB scanner de code à barres avec en ignorant clavier de saisie des données de tout scanner id de produit et l'id du fournisseur ne sont pas connus

J'ai également vu bibliothèque commerciale (ce qui est offcourse sans sources et aucune info sur la façon dont il est mis en œuvre, mais en considérant qu'ils ont avais quelques mot "Performance counter" dans leur changelogs, je suppose qu'ils ont utilisé la solution dans le lien ci-dessus), qui implémente cette fonctionnalité, mais il ne fonctionne pas dans les systèmes x64. Probablement en raison de code désordre ou dans la mesure où il utilise probablement une sorte de filtre (mini) pilote. C'est cryptée et je ne peux pas le redistribuer.

Ma question exacte est:
Est-il possible de déterminer que ce clavier HID est en fait pas un clavier, mais un scanner de code à barres? J'ai vu sur Win 7 x64 qu'il se connecte en tant que lecteur de code-Barres, pas de clavier (ce qui était un système de bug, ou en quelque sorte).

Exactement ce que je fais aujourd'hui:

  1. Lire les entrées par RID_INPUTSINK.
  2. Distinguer toutes les entrées par des vid&pid de l'appareil
  3. Mettre tous entrée pour séparer les tampons et la collecte de codes-barres à partir de la mémoire tampon lors de la VK_ENTER montre de la mémoire tampon.

Ce que je suis en train de faire va faire:

  1. Lire l'entrée par RID_INPUTSINK
  2. Démarrer la minuterie particulières de l'appareil, et si le prochain symbole est VK_ENTER - chronomètre d'arrêt
  3. Si la minuterie est supérieure à 50 ms limite - off et la chute de tous les autres périphériques d'entrée.
  4. Si l'appareil va réussir à lire la séquence de caractères à partir de la première symbole de VK_ENTER - extrait appareil VID&PID/gérer et de travailler avec elle dans la plus pratique (sans timering).

Je suis developng sur C++, pur WinAPI, il sera une bibliothèque DLL, et j'ai commencé à travailler dans Windows XP, Vista, 7, 8 sur 32 86 et x32-64 architectures.

Mise à JOUR 0:
Juste trouvé que scanner de code à barres ont leur propre usagePage et l'utilisation de l'USB spécifications:
http://www.usb.org/developers/devclass_docs/pos1_02.pdf

Selon ce document, USB code à Barres scanneur ont UsagePage 0x8C et l'Utilisation 0x02. Malheureusement, je n'ai pas réussi à l'utiliser comme RAWINPUTDEVICE.dwUsage et RAWINPUTDEVICE.dwUsagePage. Probablement parce que le système de l'installer clavier usb pilote sur le haut et dans le mode utilisateur, il est impossible de distinguer les vrais clavier usb. Probablement ces valeurs sont utilisables dans kernelmode de l'environnement (l'une des options est de développer hid pilote de filtre).

OriginalL'auteur Ivan0x32 | 2012-09-19