2017-05-07 2 views
3

Je fais une application web de gestion de gym qui gère les connexions. Les membres ont un code-barres sur une étiquette qu'ils scannent lorsqu'ils arrivent au gymnase.Est-il possible de numériser des codes-barres dans un processus en arrière-plan?

J'ai entendu dire que la plupart des lecteurs de codes-barres agissent simplement comme un clavier. Cela nécessiterait que la page de numérisation soit ouverte et au premier plan lorsqu'un code à barres est scanné.

Si c'est juste un clavier, comment pourrais-je envoyer l'entrée du scanner de codes-barres à un seul processus d'arrière-plan en cours d'exécution sur l'ordinateur, et l'ont par ignorer tous les processus qui peuvent être mis au point?

Répondre

1

Vous avez raison que la plupart scanner peut prendre en charge HID dans l'émulation du clavier, mais c'est juste le début.

Si vous voulez avoir un peu plus de contrôle sur les données que vous pouvez utiliser un scanner qui prennent en charge le modèle de pilote OPOS.
Jetez un oeil à Zebra's Windows SDK pour avoir un aperçu des choses que vous pouvez faire. Cela peut être une meilleure solution que d'essayer de voler les données du code à barres arrivant dans le système d'exploitation en tant qu'entrée de clavier dans l'application de premier plan.

Disclaimer: Je travaille pour Zebra Technologies
Autre soutien du fournisseur du scanner de code à barres, un modèle de pilote similaire.

0

J'ai trouvé un post intéressant avec une solution simple:

Sur le constructeur du formulaire

InitializeComponent(): 
this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Form1_KeyPress); 

gestionnaire & articles de soutien:

DateTime _lastKeystroke = new DateTime(0); 
List<char> _barcode = new List<char>(10); 

private void Form1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    // check timing (keystrokes within 100 ms) 
    TimeSpan elapsed = (DateTime.Now - _lastKeystroke); 
    if (elapsed.TotalMilliseconds > 100) 
     _barcode.Clear(); 

    // record keystroke & timestamp 
    _barcode.Add(e.KeyChar); 
    _lastKeystroke = DateTime.Now; 

    // process barcode 
    if (e.KeyChar == 13 && _barcode.Count > 0) { 
     string msg = new String(_barcode.ToArray()); 
     MessageBox.Show(msg); 
     _barcode.Clear(); 
    } 
} 

Crédits: @ltiong_sh

originale poste: Here