2010-01-14 8 views
12

Existe-t-il un moyen d'obtenir des événements clés dans une console Windows? J'ai besoin d'un moyen d'obtenir rapidement les événements de keydown et de keyup sans interface graphique. J'ai essayé d'utiliser getch(), mais il n'obtient pas de keyups et attend jusqu'à ce qu'une touche ait été pressée pour retourner.Événements de clavier de la console C++

+0

Vous dites « sans interface graphique », mais la plupart du temps (que je connais) sur les fenêtres que vous utilisez une console à l'intérieur d'une fenêtre. Dans les cas où vous avez une fenêtre, vous pouvez accrocher cette fenêtre et capturer ses messages. – Zac

Répondre

7

Vous pouvez utiliser GetKeyState ou GetAsyncKeyState, mais cela ne vous donnera pas d'événements de raccourci clavier. Il ne vous dira que les clés sont actuellement en panne. Par conséquent, si vous avez vraiment besoin d'obtenir les événements keydown/keyup, vous pouvez installer un hook. Une fenêtre de console possède une poignée de fenêtre appartenant au code dans Windows et une pompe de message, qui appartient également au code dans Windows.

Vous pouvez obtenir le handle de fenêtre de la console en utilisant GetConsoleWindow Ensuite, installez un WH_CALLWNDPROC en utilisant SetWindowsHookEx pour écouter les messages envoyés à la fenêtre de la console.

Vous pouvez essayer un crochet WH_MSGFILTER à la place. Je ne sais pas si cela fonctionne pour les fenêtres de console, mais cela génèrerait moins de messages à ignorer si cela fonctionne.

8

Utiliser ReadConsoleInput() API. Surveiller les événements de type KEY_EVENT. Cela ne fonctionnera pas pour tous les événements de touche (Ctrl-touche, Maj-touche, Pause-clé ne peut pas être lu), mais la plupart peuvent être lus. Utilisez GetNumberOfConsoleInputEvents pour éviter le blocage.

1

Il existe plusieurs façons. GetKeyboardState serait l'un des plus évidents.

2

J'étais juste curieux, comment une telle question logique n'a aucune explication sur Google, Donc, il faut le demander ici. Donc, je googlé pour: "événements clavier application console" et devinez quoi ... 2 premiers liens sont intéressants (mais malheureusement pas exactement les réponses à votre question):

+3

J'ai googlé la même chose, devinez quoi ... le troisième lien pointait vers cette page. – avakar