2010-04-25 6 views
7

J'essaye d'obtenir que mon application fasse quelque chose quand CTRL + S est pressé. Je ne suis pas sûr de savoir comment les paramètres W et L fonctionnent pour WM_KEYDOWN. MSDN a quelque chose à propos des champs de bits dont je ne suis pas sûr. Comment puis-je détecter CTRL et S? RemerciementsWM_KEYDOWN confusion

Que faire si un autre contrôle hormis hWnd est activé?

Répondre

16

Eh bien, this est la grande liste des codes de clés virtuelles.

CTRL-S va être envoyé par 2 comme WM_KEYDOWN messages - un message lorsque la touche Ctrl est pressée (VK_LCONTROL ou VK_RCONTROL) suivi d'un 0x53 pour la touche « S ». Plutôt que de traiter les deux messages, attendez le message de la touche 'S', puis appelez le GetKeyState en utilisant la valeur magique VK_CONTROL (autre que vous auriez besoin de tester individuellement pour les touches de contrôle gauche et droite) pour voir si le S a été pressé avec CTRL maintenu enfoncé.

-

De toute évidence, les messages du clavier sont envoyés directement à la fenêtre qui a le focus. Pour que les combinaisons d'accélérateurs fonctionnent au niveau de l'application, vous devez vérifier les messages avant de les envoyer dans la fenêtre de mise au point, c'est-à-dire dans votre pompe de messages. Voir la documentation pour TranslateAccelerator.

Si vous souhaitez gérer des pressions de touche à l'échelle du système, les autres réponses pointent vers l'api de raccourci clavier. Lorsque WPARAM est égal au code VTR CTRL, définissez un bool dans l'état de votre objet.

+0

Qu'est-ce que je fais est un autre contrôle mis à part le hWnd? – jmasterx

+0

Pour gérer les combinaisons ctrl-X, vous utiliseriez l'API de l'accélérateur. Systemwide - le raccourci api. –

-2

Ensuite, quand S arrive, si Ctrlbool, vous avez CTRL-S.

+1

Que faire s'il quitte la touche Ctrl avant d'appuyer sur S? Ensuite, vous devez gérer les messages de clé pour le suivre. La réponse de Chris est l'approche appropriée. –