Obtenez toutes les touches enfoncées
Que dois-je utiliser pour être en mesure d'obtenir "toutes les clés" qui sont pressées sur le clavier à l'instant? Depuis Form.KeyPress += new EventHandler()
ne fait pas beaucoup quand il est rempli de contrôles. Il ne demande pas, peu importe ce que je fais, ni KeyDown, KeyUp ou autre chose... et oui, je sais comment les utiliser.
Donc, si il n'y a aucune fonction dans le système qui peut vérifier les touches pressées, qui renvoie un tableau des touches, ou quelque chose - je vous serais reconnaissant d'être pointé dans la bonne direction.
- Voulez-vous toutes les touches lorsque vous exécutez une partie spécifique du code, ou voulez-vous un événement qui se produit chaque fois que vous appuyez sur une touche?
- double possible de la Meilleure façon de mettre les raccourcis clavier dans winforms?
- Dire je veux avoir un gestionnaire d'événements pour la roulette de la souris, mais je veux la touche "Ctrl" pour être pressé quand j'execute quelque chose dans le Gestionnaire d'événements. donc, Si j'ai faites défiler la molette de je seulement obtenir les résultats de la molette de la souris, pas la pression de touche.
Vous devez vous connecter pour publier un commentaire.
Il semble que vous voulez interroger l'état de toutes les touches du clavier. La meilleure fonction pour ce qui est de l'API Win32 appel
GetKeyboardState
Je ne crois pas qu'il y est une bonne géré équivalent de cette fonction. PInvoke code est assez simple
Cela va remplir les
byte[]
avec le haut /bas de l'état de chaque touche virtuelle dans le système. Si le bit est réglé puis la touche est enfoncée. Une cartographie de l'Key
à un code de touche virtuelle est fait en ne considérant que labyte
partie de du numériqueKey
valeur.Les travaux ci-dessus pour la plupart des
Key
valeurs, mais vous devez être prudent avec les touches de modification. Les valeursKeys.Alt
,Keys.Control
etKeys.Shift
ne marchera pas, parce qu'ils sont techniquement des modificateurs et non pas des valeurs clés. Pour utiliser les modificateurs vous devez utiliser la réelle associée à des valeurs de cléKeys.ControlKey
,Keys.LShiftKey
, etc ... (vraiment tout ce qui se termine avec la Clé)Afin de vérifier si la clé est peut être fait comme suit
GetKeyboardState
n'est pas un .Net fonction. C'est un natif j'ai importé, si vous collez dans ma définition qu'il devrait fonctionner correctement.J'ai élargi sur JaredPar réponse un peu. La méthode suivante renvoie la collection de toutes les touches, qui sont actuellement d'être pressé:
DistinctVirtualKeys
assignation dans VB.Net. Pouvez-vous commenter mieux, et j'obtiens l'erreur qu'il n'y a pas de paramètre pour.Select(KeyInterop.KeyFromVirtualKey)
?enum System.Windows.Input.Key
lienSi vous avez uniquement besoin de connaître toutes les frappes de touches lorsque votre application est active, peu importe qui contrôle au sein de votre application a le focus, vous pouvez utiliser le
KeyPreview
propriété de votre formulaire.Suffit de définir la propriété de vrai et de vous abonner à la Touche désirée événements sur la forme. Maintenant, vous recevrez toutes les frappes au sein de votre application avant qu'ils soient transmis au béton de contrôle, vous permettant de réagir sur vous-même sur elle et annuler sa transmission au contrôle de définir la
Cancel
true à la propriété.Si vous avez besoin de recevoir les touches pressées pendant que votre application n'est pas active, alors vous avez besoin d'un hook clavier de bas niveau. Je n'ai pas tester, mais cet article sur CodeProject semble tout à fait prometteur pour ce cas.
Je crois que vous êtes à la recherche pour le PreviewKeyDown événement qui se déclenche si une touche est enfoncée alors que le formulaire a le focus, même si un autre enfant de contrôle au sein de ce formulaire a actuellement le focus.