Scanner de code à barres «Symbol» et c #

J’ai un scanner de codes à barres de marque “Symbol” (USB) et j’essaie de capturer les données numérisées d’un code à barres dans mon application (qui fonctionne en tant que service – sans contrôle de zone de texte, bien sûr).

Le problème est que: chaque fois que vous numérisez quelque chose, il agit comme un clavier et transmet les chiffres à tout ce qui a le focus (par exemple, le bloc-notes, un mot, etc.).

Ma question est la suivante: comment puis-je effectuer cette numérisation en arrière-plan et la placer dans une variable que je peux utiliser dans mon C #.

Jusqu’à présent, les seules API que j’ai trouvées sont destinées à .NET CF et j’ai besoin que ce soit un service Windows.


En gros, je veux pouvoir envoyer certaines frappes au clavier à une application si le code à barres = “123456789-0111” sans interférer avec la fenêtre active qui a le focus. Une fois que mon application a lu le code à barres, il recherche un programme spécifique (lancez-le et définissez le focus) et envoie des frappes au clavier. J’utilise le code 128.

Le mode HID sera votre meilleur.

Mettez le lecteur de code à barres en mode HID et faites en sorte que votre service capture le lecteur. Lorsque les données arrivent, jetez-y un coup d’œil et si c’est l’un de vos codes à barres spéciaux, vous pouvez agir dessus.

Si les données ne font pas partie de vos codes à barres spéciaux, insérez-les sous forme de messages de fenêtre Keydown / Keyup afin qu’elles semblent fonctionner de la même manière qu’en mode d’émulation du clavier.

  1. Mettez le scanner en mode USB. Cela se fait généralement en scannant une série de codes à barres dans votre manuel ou en les imprimant à partir du logiciel fourni à partir du symbole.

  2. Avec le scanner branché / connecté, connectez-vous à Windows Update. Vous obtiendrez une mise à jour spécifique à ce scanner. Cela ne fonctionnera pas si le scanner n’est pas branché.

  3. Le scanner doit mapper sur un port com. Cela a généralement été com 2 sur les machines sur lesquelles je l’ai configuré.

  4. Téléchargez JustinIO . Pour mon scanner, parameters COM utiles: Vitesse de transmission: 9600, ByteSize 8, StopBits: 1 Parité: 0

  5. Créez une nouvelle instance CommPort. Mettre en place un thread qui fait quelque chose comme:


SsortingngBuilder sb; byte[] b; do { b = commPort.Read(1); sb.Append(Encoding.ASCII.GetChars(b)); Thread.Sleep(20); //symbol is slow... } while(b.Length > 0); 

Remarque: le code que je suis en train d’utiliser est beaucoup plus complexe. Vous devrez donc le modifier pour votre application.

  1. Envoyez la chaîne à votre application via la méthode qui vous semble appropriée.

Le scanner est configuré en tant que HID (périphérique d’interface humaine) et clavier émulé. Pour y accéder via l’API de Symbol, vous devez probablement désactiver le mode de communication actuel et le définir sur le mode natif – vous devez le documenter dans le manuel du scanner. Ensuite, vous pouvez y accéder directement sans champ de saisie.

PS Je n’ai pas de scanner Symbol, mais cela est commun à de nombreux appareils.

Cela dépend vraiment de l’API du scanner de codes à barres, et cela est spécifique au fournisseur. Vous devrez obtenir l’API pour le scanner auprès du fournisseur. Si vous ne la trouvez pas sur leur site, vous devez simplement envoyer un e-mail à leur assistance, mais vous devrez peut-être acheter l’API.

Premier..

Ignorez les informations .NET CF pour l’instant car elles concernent probablement l’unité portable. Le mode de fonctionnement, se faisant passer pour un clavier, est classiquement désigné par le terme de “coin de clavier”.

Seconde..

Quel type de symbologies de codes à barres essayez-vous d’utiliser? Et pour quoi faire? Ou plus directement, … À quoi ressemblent les codes à barres lorsqu’ils sont numérisés? (Contiennent-ils des caractères spéciaux de début et de fin?)

Troisièmement … restz simple … évitez l’API sauf si c’est nécessaire …

Auparavant, lorsque je devais faire l’interface avec des scanneurs de codes à barres, j’utilisais une approche très simple, mon formulaire de saisie de données ayant la propriété de KeyPreview true et contenant une méthode pour détecter et diriger les entrées en provenance du scanneur (en examinant caractères de début et de fin) au contrôle approprié. La plupart des scanners auxquels j’ai eu affaire étaient programmables (généralement via des codes à barres) pour transmettre un ensemble personnalisé de caractères afin de signaler le début et la fin de l’entrée numérisée.

J’espère que ça aide ….

Voici un exemple CodeProject qui montre comment configurer des crochets globaux de souris et de clavier en C #:

http://www.codeproject.com/KB/cs/globalhook.aspx

Vous pouvez append ce code à votre application console, puis simplement surveiller toutes les entrées au clavier, en recherchant les codes spécifiques dont vous avez besoin. Aucune API ni muss.