Meilleure façon de gérer la saisie à partir d’un « coin » du clavier

StackOverflow https://stackoverflow.com/questions/42437

  •  09-06-2019
  •  | 
  •  

Question

J'écris un système C# POS (point de vente) qui prend les entrées d'un lecteur de carte magnétique à clavier.Cela signifie que toutes les données lues sur une bande magnétique sont saisies comme si elles étaient saisies très rapidement sur le clavier.Actuellement, je gère cela en m'attachant à l'événement KeyPress et en recherchant une série de pressions de touches très rapides contenant les caractères sentinelles du glissement de carte.

Existe-t-il une meilleure façon de gérer ce type de contribution ?

Modifier:L'appareil présente simplement les données sous forme de frappes au clavier et ne s'interface pas via un autre pilote.Nous utilisons également une large gamme de ces types d'appareils, donc idéalement, une méthode devrait fonctionner indépendamment du modèle spécifique de coin utilisé.Cependant, s'il n'y a pas d'autre option, je devrai me débrouiller.

Était-ce utile?

La solution

Une chose que vous pouvez faire est de pouvoir configurer votre lecteur Wedge afin qu'il présente un ou plusieurs caractères d'échappement avant ou après la chaîne.Vous utiliseriez ces caractères d'échappement pour savoir que vous êtes sur le point d'avoir (ou venez d'avoir) une entrée magcard.

Cette même technique est utilisée par les lecteurs de codes-barres afin que votre application sache comment se concentrer ou gérer les données saisies depuis le périphérique.

L'inconvénient de cette approche est que vous devez configurer correctement vos périphériques externes.Cela peut être un problème de déploiement.

Cela suppose que vos appareils présentent simplement les données sous forme de frappes au clavier et ne s'interfacent pas via un autre pilote.

Autres conseils

Vous pouvez également utiliser l'API Raw Input si vous connaissez à l'avance les identifiants matériels des appareils. J'ai blogué à ce sujet récemment. C'est peut-être fou mais cela répond à mes exigences :l'objectif principal dans mon cas était de pouvoir recevoir des commentaires même lorsque l'application perdait le focus parce que quelqu'un était accidentellement tombé sur quelque chose en fouillant pour numériser des éléments sur une palette.L'objectif secondaire est que je ne pouvais pas ajouter de caractères sentinelles, car cela aurait brisé les applications tierces existantes utilisées avec les pistolets d'analyse.

Cependant, j'ai déjà utilisé la méthode des personnages sentinelles, à la fois via un KeyPress attacher ou un crochet de clavier de bas niveau via SetWindowsHookEx() ou via KeyPreview sur le formulaire principal de votre candidature.Si cela répond à vos besoins, il est certainement beaucoup plus simple et plus facile d'utiliser cette méthode et à cette fin, j'appuie les recommandations déjà données.

Je pense que vous le gérez d'une manière acceptable, faites simplement attention à la vitesse à laquelle la carte envoie les données, nous avons des lecteurs de codes à barres sans fil, et de temps en temps, ils lancent les frappes sur le clavier trop rapidement pour que l'application puisse les gérer.

De plus, si vous distribuez votre logiciel dans d'autres territoires, les touches peuvent être différentes, par exemple en Espagne (je pense, mais peut-être en France), la ligne supérieure du clavier est !"£$%^&() par opposition au USA/UK 1234567890, et si votre lecteur de carte est réglé sur usa/uk alors il enverra !"£$%^&() à la place de 1234567890, car le coin émule simplement la touche enfoncée et si Windows l'interprète différemment, c'est votre problème.

Un autre vote pour l'idée de jttraino.Je fais à peu près la même chose avec les lecteurs de cartes et les lecteurs de chèques dans les systèmes de point de vente où nous devons prendre en charge le clavier ainsi que l'USB et le RS232.

En gros, choisissez une courte séquence de caractères peu susceptibles de provenir du clavier et programmez votre boucle de gestion des messages pour voir ces caractères arriver.Si vous obtenez un flux complet de caractères qui correspondent à votre modèle, vous pouvez décoder le reste de votre entrée jusqu'à ce que vous atteigniez la séquence de « fin » désignée ou jusqu'à ce que vous décidiez que la séquence entrante est erronée.Sélectionnez une chaîne qu'il est difficile, voire impossible, de saisir à partir du clavier normal dans votre application, compte tenu d'éléments tels que les masques d'édition et le comportement de vos différents écrans.

Un bon point de départ est quelque chose comme tilda-pling (~!) car ces caractères n'apparaîtront probablement pas dans les détails personnels de qui que ce soit et n'auront probablement jamais besoin d'apparaître ensemble dans le texte d'une note, etc.:-)

L'inconvénient, exactement comme l'a dit jttraino, est que vous devrez probablement configurer/programmer chaque lecteur lui-même.Certains fabricants rendent cette opération assez simple : quel kit utilisez-vous ?Magtek?Welch Allyn?

J'appuie L'idée de @jttraino.

C'est la voie à suivre pour les lecteurs de codes-barres et autres appareils similaires plug and play (PnP).J'ai utilisé la même technique pour configurer quelques lecteurs de codes à barres 1D et 2D lors de ma précédente mission.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top