2010-04-25 9 views
7

Estoy intentando hacer que mi aplicación haga algo cuando se presiona CTRL + S. Simplemente no estoy seguro de cómo funcionan los parametros W y L para WM_KEYDOWN. MSDN tiene algo sobre campos de bits de los que no estoy seguro. ¿Cómo puedo detectar CTRL y S? GraciasWM_KEYDOWN confusion

¿Qué debo hacer si otro control aparte de hWnd tiene foco?

Respuesta

16

Bueno, this es la gran lista de códigos de teclas virtuales.

CTRL-S va a ser enviado a través de como 2 WM_KEYDOWN mensajes - un mensaje cuando la tecla CTRL se pulsa (VK_LCONTROL o VK_RCONTROL) seguido de una 0x53 para la tecla de "S".

En lugar de procesar ambos mensajes, espere el mensaje de la tecla 'S' y luego llame al GetKeyState usando el valor mágico VK_CONTROL (para ver si necesita las teclas de control izquierda y derecha) la S fue presionada con CTRL presionada.

-

Obviamente, mensajes de teclado se envían directamente a la ventana que tiene el foco. Para que las combinaciones de aceleradores funcionen en el alcance de la aplicación, debe verificar los mensajes antes de enviarlos a la ventana de enfoque, es decir, en su bomba de mensajes. Consulte la documentación para TranslateAccelerator.

Si desea controlar las pulsaciones de tecla de todo el sistema, la otra respuesta apunta a la tecla de acceso rápido api.

+0

¿Qué debo hacer es otro control aparte de hWnd tiene foco? – jmasterx

+0

Para manejar la aplicación de combinaciones ctrl-X de ancho, usaría la API del acelerador. Systemwide - la api de la tecla de acceso rápido. –

-2

Cuando la WPARAM es igual al CTRL VKcode, configure un bool en el estado de su objeto. Luego, cuando aparece S, si Ctrlbool, tienes CTRL-S.

+1

¿Qué pasa si él deja la tecla Ctrl antes de presionar S? Luego necesita manejar mensajes de teclado para rastrearlo. La respuesta de Chris es el enfoque apropiado. –