Tasto di scelta rapida globale con API WIN32?
-
10-07-2019 - |
Domanda
Sono stato in grado di impostare tasti di scelta rapida locali come questo
RegisterHotKey(hwndDlg, 100, MOD_ALT | MOD_CONTROL, 'S');
Come posso impostare il tasto di scelta rapida su globale? Voglio che sia lì anche quando la mia finestra è nascosta.
Soluzione
L'ho risolto da solo ma grazie per la tua risposta ecco cosa c'era di sbagliato ...
ShowWindow(hwndDlg, SW_HIDE);
RegisterHotKey(hwndDlg, 100, MOD_ALT | MOD_CONTROL, 'S');
se prima registri il tasto di scelta rapida quindi nascondi la finestra ... ignora il tasto di scelta rapida per qualche motivo ... vabbè .. ora funziona :)
Altri suggerimenti
http: // msdn .microsoft.com / it-it / library / windows / desktop / ms646309 (v = vs.85) aspx
hWnd [in, opzionale]
Tipo: HWND
lt &; ... gt &; Se questo parametro è NULL, i messaggi WM_HOTKEY vengono registrati in coda di messaggi del thread chiamante e deve essere elaborata in ciclo di messaggi.
Questo è un modo migliore per registrare tasti di scelta rapida globali.
Non importa se la tua finestra è visibile o meno. Non dovresti usare un h e intendi distruggere (come una finestra di dialogo). Crea una finestra separata (invisibile) se non hai un'altra finestra adatta.
Per prima cosa definisci una o più costanti per i tuoi tasti di scelta rapida
#define HOTKEY1 1000
#define HOTKEY2 1002
Quindi registri 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 look dell'evento principale, controlli questi tasti di scelta rapida e rispondi:
if (msg.message == HOTKEY1)
{
switch (LOWORD(msg.wParam))
{
case HOTKEY1:
// do such and such
break;
case HOTKEY2:
// do such and such
break
}
}