2009-11-30 12 views
15

Sono stato in grado di impostare tasti di scelta rapida locali come questoTasto rapido globale con API WIN32?

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

Come posso impostare il tasto di scelta rapida per essere globale? Voglio che sia lì anche quando la mia finestra è nascosta.

+2

Ho scritto app per Windows da quasi 20 anni e non sapevo che esistesse questa chiamata API - così t hanks e +1. :) – Rob

risposta

11

ho risolto io stesso, ma grazie per la risposta ecco quello che era sbagliato ...

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

se si registra il tasto di scelta rapida prima poi nascondere la finestra ... ignora il tasto di scelta rapida per qualche motivo .. . vabbè .. e 'ora di lavoro :)

+1

Fresco. Quindi è garantito essere globale? – Viet

+0

si penso di si :) – Mars

5

Non importa se la tua finestra è visibile o meno. Non dovresti usare una hWnd che hai intenzione di destare (come una finestra di dialogo). Crea una finestra separata (invisibile) se non hai un'altra finestra adatta.

+2

Non lo distruggo Lo nascondo in questo modo ShowWindow (hwndDlg, SW_HIDE); – Mars

2

In primo luogo è possibile definire una o più costanti per i vostri tasti di scelta rapida

#define HOTKEY1 1000 
#define HOTKEY2 1002 

Poi registrare questi tasti di scelta rapida

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

Infine nel main event guarda di monitorare questi tasti di scelta rapida e rispondere ad esse:

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