2009-11-30 16 views
15

he podido configurar teclas de acceso rápido locales como éstetecla de acceso rápido global con API WIN32?

RegisterHotKey(hwndDlg, 100, MOD_ALT | MOD_CONTROL, 'S'); 

¿Cómo puedo configurar la tecla de acceso directo a ser global? Quiero que esté allí incluso cuando mi ventana esté oculta.

+2

He estado escribiendo aplicaciones de Windows durante casi 20 años y no sabía que esta llamada a la API existía, por lo que t madejas, y +1. :) – Rob

Respuesta

11

lo resolví yo mismo, pero gracias por su respuesta esto es lo que estaba mal ...

ShowWindow(hwndDlg, SW_HIDE); 
RegisterHotKey(hwndDlg, 100, MOD_ALT | MOD_CONTROL, 'S'); 

si se registra la tecla primero y luego ocultar la ventana ... No tiene en cuenta la combinación de teclas por alguna razón .. . .. oh bien que está funcionando ahora :)

+1

Cool. Entonces, ¿está garantizado que será global? – Viet

+0

sí, eso creo :) – Mars

5

No importa si su ventana está visible o no. No debe usar un hWnd que planee destory (como un diálogo). Cree una ventana separada (invisible) si no tiene otra ventana adecuada.

+2

No lo destruyo Simplemente lo oculto así ShowWindow (hwndDlg, SW_HIDE); – Mars

2

En primer lugar, definir una o más constantes para sus teclas de acceso rápido

#define HOTKEY1 1000 
#define HOTKEY2 1002 

A continuación, registrar estos teclas de acceso rápido

RegisterHotKey(NULL, HOTKEY1, MOD_ALT + MOD_SHIFT, 0x53); // ALT+SHIFT+s 
RegisterHotKey(NULL, HOTKEY2, MOD_ALT + MOD_SHIFT, 0x51); // ALT+SHIFT+q 

Finalmente en el evento principal miras a controlar estas teclas de acceso rápido y responder a ellas:

  if (msg.message == HOTKEY1) 
     { 
      switch (LOWORD(msg.wParam)) 
      { 
      case HOTKEY1: 
       // do such and such 
       break; 
      case HOTKEY2: 
       // do such and such 
       break 
      } 
     } 
Cuestiones relacionadas