2009-11-30 16 views
15

byłem w stanie ustawić lokalnych skrótów klawiszowych jak tenGlobalny klawisz skrótu z interfejsem WIN32 API?

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

Jak mogę ustawić skrótu być globalne? Chcę, żeby to było, nawet gdy moje okno jest ukryte.

+2

Piszę aplikacje dla systemu Windows przez prawie 20 lat i nie wiedziałem, że to połączenie API istnieje - więc t hanks i +1. :) – Rob

Odpowiedz

11

I rozwiązać go samodzielnie, ale dzięki za odpowiedź Oto, co się stało ...

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

jeśli zarejestrować skrótu pierwszy następnie ukryć okno ... ignoruje skrótu z jakiegoś powodu .. . no cóż .. to działa teraz :)

+1

Cool. Czy masz gwarancję globalności? – Viet

+0

tak Myślę, że tak :) – Mars

5

Nie ma znaczenia, czy okno jest widoczne, czy nie. Nie powinieneś używać hW planowaniu zniszczenia (jak okno dialogowe). Utwórz oddzielne (niewidoczne) okno, jeśli nie masz innego odpowiedniego okna.

+2

Nie niszczę tego Po prostu ukrywam to w ten sposób ShowWindow (hwndDlg, SW_HIDE); – Mars

2

Najpierw trzeba zdefiniować jeden lub więcej stałych dla swoich skrótów

#define HOTKEY1 1000 
#define HOTKEY2 1002 

Wtedy rejestrowania tych gorących klawiszy

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

Ostatecznie w turnieju głównym wyglądać monitorowanie tych gorących klawiszy i odpowiedzi do nich:

  if (msg.message == HOTKEY1) 
     { 
      switch (LOWORD(msg.wParam)) 
      { 
      case HOTKEY1: 
       // do such and such 
       break; 
      case HOTKEY2: 
       // do such and such 
       break 
      } 
     } 
Powiązane problemy