Claviers multiples et crochets de bas niveau
J'ai un système où j'ai plusieurs claviers et vraiment besoin de savoir qui clavier la touche. Pour expliquer la mise en place:
- J'ai un PC normal et clavier USB
- J'ai un écran VGA externe avec quelques touches de
- Les touches sont mappés comme un clavier USB standard, l'envoi d'un nombre limité de clés ou de codes (F1, F2, Retour, + et -)
J'ai un faible niveau de crochet (en C# mais en réalité, appelant les fonctionnalités Win32) qui est en mesure de faire face à l'entrée, même si ma demande n'est pas concentré.
Le problème est que lorsque vous utilisez le clavier normal, certains cartographié les principaux codes à ramassé par l'application en cours axée sur l'écran externe. L'un des presses envoyé par l'écran externe et utilisées pour la confirmation est VK_RETURN. À moins que je puisse l'identifier "l'appareil" et le filtre à elle, l'utilisateur peut effectuer les actions et de les confirmer sur un écran de leur ne regarde même pas.
Comment puis-je savoir quel clavier a été responsable de la touche-appuyez sur?
source d'informationauteur Ray Hayes
Vous devez vous connecter pour publier un commentaire.
Oui je suis corrigé, mon mauvais, d'apprendre quelque chose de nouveau chaque jour.
Voici ma tentative de faire pour elle 🙂 :
Enregistrer les périphériques que vous souhaitez utiliser pour les entrées brutes (les deux claviers) avec ::RegisterRawInputDevices().
Vous pouvez obtenir ces appareils à partir de GetRawInputDeviceList()
Après que vous avez enregistré vos appareils, vous allez commencer à obtenir WM_INPUT messages.
Le lParam de la WM_INPUT message contient un RAWKEYBOARD structure que vous pouvez utiliser pour déterminer le clavier où l'entrée est venu, plus le virtuel du mot de code et le type de message (WM_KEYDOWN, WM_KEYUP, ...)
De sorte que vous pouvez définir un indicateur de l'endroit où le dernier message est venu de puis l'envoi régulier de la saisie au clavier des gestionnaires.
Aucun moyen de le faire. Windows résumés pour vous. Comme mentionné précédemment, vous devez écrire/modifier un pilote de périphérique.