Il existe plusieurs façons d'attraper la souris ou le clavier sous Windows. J'ai donc essayé certains d'entre eux, mais chacun d'eux a des avantages et des inconvénients. Je veux vous demander: quelle méthode utilisez-vous?
J'ai essayé ces derniers:
WM_KEYDOWN / WM_KEYUP - Le principal inconvénient est que je ne peux pas faire la distinction entre les touches gauche et droite comme ALT, CONTROL ou SHIFT.
GetKeyboardState - Cela résout le problème de la première méthode, mais il y en a une nouvelle. Lorsque j'obtiens que la touche ALT droite est enfoncée, j'obtiens également que la touche Contrôle gauche est enfoncée. Ce problème se produit uniquement lors de l'utilisation d'une disposition de clavier localisée (tchèque - CS).
WM_INPUT (Raw Input) - Cette méthode ne distingue pas non plus les touches gauches et droitières (si je me souviens bien) et pour le mouvement de la souris génère parfois un message avec des valeurs delta nulles de la position de la souris.
Y a-t-il une raison pour laquelle vous ne pouvez pas les combiner? Par exemple, utilisez WM_KEYDOWN pour détecter la pression d'une touche Ctrl / Alt / Maj, puis dans cet appel utilisez GetKeyboardState () pour distinguer gauche de droite?
la source
WM_INPUT est sympa. Je pense que vous pouvez distinguer les touches gauche / droite en utilisant la structure RAWKEYBOARD . La partie difficile est peut-être de savoir comment gérer les identifiants clés (c'est-à-dire les scancodes), mais je ne peux pas le dire car je n'ai jamais essayé de l'utiliser pour la saisie au clavier. WM_KEYDOWN est si facile :)
J'ai cependant utilisé WM_INPUT pour la saisie de la souris. C'est très bas niveau. Il n'y a aucune accélération appliquée, ce qui est très agréable (IMO). WM_INPUT était le seul moyen de profiter du mouvement de la souris à haute résolution, mais je ne sais pas si c'est toujours le cas. Voir cet article MSDN de 2006 .
DirectInput pour souris / clavier est explicitement déconseillé par Microsoft. Consultez l'article MSDN précédemment lié. Si vous avez besoin d'un joystick, XInput est probablement le chemin à parcourir.
EDIT: Mes informations à ce sujet peuvent être trop datées.
la source
En fait, différenciez L / R Ctrl / Alt lorsque vous attrapez WM_KEYDOWN / WM_KEYUP, vous le pouvez. Facile, ce n'est pas le cas, mais le code que j'utilise, ici vous pouvez l'avoir, hmm hmm.
J'espère que cela fonctionne toujours, je le fais.
la source
Vous pouvez essayer l' API DirectInput ou, plus récemment, l' API XInput .
la source