Sur un ordinateur que j'ai à la fois un clavier et d'un lecteur de code-barres qui émule un clavier. Lorsque mon appli obtient la saisie au clavier, comment puis-je déterminer si cette entrée est à venir à partir du lecteur de code-barres ou le vrai clavier?
source d'informationauteur Mahboobeh Mohammadi
Vous obtiendrez d'entrée de deux. Pas simultanémentbien sûr. Il sera placé dans une file d'attente, mais Windows va traiter des événements clés de deux claviers.
Ne pas être impuissant. Comme David Heffernan l'indique, vous pouvez facilement comprendre cela par vous-même en branchant les deux claviers à votre ordinateur, ouvrir le bloc-notes, et en tapant des caractères aléatoires de voir que l'on génère d'entrée.
Vous répondre que vous souhaitez vérifier avec le code C#", mais je n'ai aucune idée de ce que cela signifie. Comment créer une application console qui lit l'entrée du clavier et l'affiche sur l'écran?
Appuyez sur Ctrl+C lorsque vous vous lassez de l'amusement et que vous voulez quitter le programme.
Edit: Il semble que vous êtes à la recherche pour le
RegisterRawInputDevices
functionqui permet d'activer les entrées brutes pour toutes vos claviers, puis énumérer les résultats pour déterminer l'appareil qui a envoyé le message.Heureusement, il ressemble à quelqu'un a déjà écrit un C# wrapper de la bibliothèque pour ce, disponible en téléchargement sur le Code du Projet: À l'aide de matières d'Entrée à partir de C# pour gérer plusieurs claviers
Edit 2: (il semble que l'information ne cesse de tromper dans les commentaires)
Si vous utilisez un lecteur de codes à barres, cela devient beaucoup plus facile. Parce qu'ils sont expressément conçus à cet effet, ils sont presque tous programmable. Ce qui signifie que vous pouvez leur dire de préfixe et/ou suffixe) leur entrée avec quelques sentinelles des caractères qui indiquent l'entrée est à venir à partir du scanner de code à barres, plutôt que sur un clavier standard. (Vérifiez que votre scanner de code à barres manuel de l'utilisateur pour plus d'informations.) Ensuite, tout ce que vous avez à faire est de filtrer les entrées au clavier en fonction de la présence ou de l'absence de ces sentinelles de caractères. Vous pouvez aussi vérifier comment rapidement les caractères entre le préfixe et le suffixe de saisie.
Prendre un coup d'oeil à Microsoft MultiPoint SDK
(edit: cette réponse n'est plus valable maintenant que la question a été clarifiée. je pars ici pour d'autres à découvrir)
C'est OS dépendante, mais vous verrez que dans la plupart des systèmes d'exploitation modernes, vous obtiendrez l'entrée simultanée de deux. La meilleure méthode serait de vraiment l'essayer sur votre plate-forme.
Éviter d'avoir à la fois des gens de type en même temps 😉
Ont un écouteur d'événement vérifier le temps de retard entre les frappes de touches. Un scanner de code-barres va envoyer des séquences de touches très rapide, alors qu'un homme de la saisie à l'aide du clavier sera relativement lent. Je sais que cela va fonctionner parce que j'ai fait telle chose à l'aide de Javascript sur une application web.
Je ne sais pas de programmation C#, donc j'ai juste donné la logique. Heureux jour!
Ici est quelque chose modélisé hors de @asif réponse. C'est pour une utilisation dans une application WPF, C# et a été testé. Je suis allé avec Chronomètre car elle est plus précise que datetime, vous le trouverez dans le
System.Diagnostics
espace de noms.Je voulais le mien pour saisir du texte lorsque l'application (et non une zone de texte) a été mis en avant, ce qui est un peu différent aussi. Vous verrez que, dans le but de gérer cela correctement, car je ne sais pas quel est le véritable caractère est inséré, seul le
Key
énumération. Depuis principalement soignés sur les nombres de 1 à 10 et de ces énumérations sontD1
D2
etc, j'ai enlever le D part en cas de besoin.Essayer:
Source : http://itlearnerinsect.blogspot.com/
Presque tous les lecteurs de code à barres peut être configuré avec un préfixe et un suffixe à ce qu'il lit. Essayez et configurer le vôtre avec, par exemple, un préfixe de "*" et le suffixe , et puis dans votre code C#, forcer le focus sur une zone de texte invisible chaque fois * vient de le flux d'entrée, et dans l'événement lostfocus de cette zone de texte mis tout le code pour traiter l'entrée. Sachez cependant que le personnage que vous avez choisi pour être le préfixe n'est jamais entré dans le clavier. Aussi, définissez la propriété tabstop de la zone de texte pour de faux, juste pour garder l'utilisateur d'atteindre l'objet lors de la navigation dans l'écran. Bonne chance !