¿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++
Respuesta
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.
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.
Hay varias maneras. GetKeyboardState sería uno de los más obvios.
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):
- Processing mouse/keyboard input on MSDN.
- Console event handlers (como Ctrl-C y botón para cerrar la ventana).
Busqué en Google lo mismo, adivinen qué ... el tercer enlace apuntaba a esta página. – avakar
También puede intentar SetConsoleCtrlHandler
- 1. Cocos2d - Mac: ¿busca eventos de teclado?
- 2. Envío de eventos de teclado a otra aplicación en C# que no maneja eventos de Windows
- 3. Consola de teclado concurrente/no bloqueada entrada
- 4. Recibir eventos de teclado de iPhone
- 5. Propagación de eventos de teclado en winforms
- 6. javascript: Cómo depurar eventos de teclado
- 7. teclado procesador de eventos En JavaScript
- 8. ¿Escuchando eventos de teclado sin atraparlos?
- 9. Enviar eventos de mouse y teclado
- 10. Leer eventos de teclado en Android WebView
- 11. Retraso de hilo y eventos de teclado en OCaml
- 12. Detectar evento de teclado en C
- 13. obteniendo eventos de teclado sin la ventana enfocada
- 14. adjuntar eventos del teclado al lienzo html5
- 15. ¿Es posible detectar eventos de enfoque de teclado globalmente?
- 16. Hoja de documento que no responde a eventos de teclado
- 17. Capture todos los eventos de teclado usando VB.Net
- 18. C# Controladores de eventos
- 19. enlaces de teclado globales (C#)
- 20. Escuchar eventos de reproducción/pausa del teclado mac
- 21. Generar eventos de teclado para la aplicación más avanzada
- 22. Ignorar eventos de mouse y teclado en Qt
- 23. ¿Cómo vincular eventos de teclado a elementos div?
- 24. Acceso directo a eventos de teclado en OSX
- 25. Eventos de teclado para elementos secundarios en un div satisfactorio?
- 26. Necesito interceptar eventos del teclado HID (y luego bloquearlos)
- 27. Programación interactiva de consola para c/C++?
- 28. C# Envío de entrada de teclado
- 29. Invocadores de eventos en C#
- 30. Manejo de eventos roscados (C#)
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