2010-01-14 149 views
12

¿Hay alguna forma de obtener eventos clave en una consola de Windows? Necesito una forma de obtener eventos de keydown y keyup rápidamente sin una GUI. He intentado usar getch(), pero no obtiene keyups y espera hasta que se haya presionado una tecla para regresar.Eventos de teclado de consola C++

+0

se dice "sin una interfaz gráfica de usuario", pero la mayoría del tiempo (que yo sepa) en las ventanas está utilizando una consola interior de una ventana. En los casos en que tiene una ventana, puede enganchar esa ventana y capturar sus mensajes. – Zac

Respuesta

7

Puede usar GetKeyState o GetAsyncKeyState, pero eso no le dará eventos de keydown/keyup. Solo le dirá qué teclas están actualmente desactivadas.

Por lo tanto, si realmente necesita obtener los eventos de keydown/keyup, puede instalar un gancho. Una ventana de consola tiene un identificador de ventana que es propiedad de código en Windows y una bomba de mensaje, también propiedad de código en Windows.

Puede obtener el identificador de ventana de la ventana de la consola usando GetConsoleWindow Luego instale un gancho WH_CALLWNDPROC usando SetWindowsHookEx para escuchar los mensajes enviados a la ventana de la consola.

Puede intentar con un gancho WH_MSGFILTER en su lugar. No sé si esto funciona para las ventanas de la consola, pero generaría menos mensajes para ignorar si funciona.

8

Use ReadConsoleInput() API. Esté atento a los eventos del tipo KEY_EVENT. Esto no funcionará para todos los eventos clave (tecla Ctrl, tecla Mayús, tecla Pausa no se puede leer), pero la mayoría se puede leer.

Utilice GetNumberOfConsoleInputEvents para evitar el bloqueo.

1

Hay varias maneras. GetKeyboardState sería uno de los más obvios.

2

Tenía curiosidad, ¿cómo es que una pregunta tan lógica no tiene ninguna explicación en Google, ? Entonces hay que preguntar aquí. Así que busqué en Google para: "eventos de teclado aplicación de consola" y supongo que lo que ... 2 primeros enlaces son interesantes (pero, por desgracia, no es exactamente respuestas a su pregunta):

+3

Busqué en Google lo mismo, adivinen qué ... el tercer enlace apuntaba a esta página. – avakar

Cuestiones relacionadas