Hotkey global avec l'API WIN32?
-
10-07-2019 - |
Question
J'ai été en mesure de définir des raccourcis clavier locaux comme celui-ci
RegisterHotKey(hwndDlg, 100, MOD_ALT | MOD_CONTROL, 'S');
Comment puis-je définir le raccourci clavier comme étant global? Je veux qu'il soit là même quand ma fenêtre est cachée.
La solution
Je l'ai résolu moi-même mais merci pour votre réponse voici ce qui n'allait pas ...
ShowWindow(hwndDlg, SW_HIDE);
RegisterHotKey(hwndDlg, 100, MOD_ALT | MOD_CONTROL, 'S');
si vous enregistrez le raccourci clavier d’abord puis cachez la fenêtre ... il l’ignore pour une raison quelconque ... ah bon ... ça marche maintenant:)
Autres conseils
http: // msdn .microsoft.com / ru-RU / bibliothèque / windows / desktop / ms646309 (v = vs.85) .aspx
hWnd [in, facultatif]
Type: HWND
< ... > Si ce paramètre est NULL, les messages WM_HOTKEY sont publiés sur le file de messages du thread appelant et doit être traitée dans le dossier boucle de message.
C’est un meilleur moyen d’enregistrer des raccourcis clavier mondiaux.
Peu importe que votre fenêtre soit visible ou non. Vous ne devez pas utiliser un mot que vous prévoyez de détruire (comme un dialogue). Créez une fenêtre (invisible) séparée si vous ne possédez aucune autre fenêtre appropriée.
Vous définissez d’abord une ou plusieurs constantes pour vos raccourcis clavier
#define HOTKEY1 1000
#define HOTKEY2 1002
Ensuite, vous enregistrez ces touches de raccourci
RegisterHotKey(NULL, HOTKEY1, MOD_ALT + MOD_SHIFT, 0x53); // ALT+SHIFT+s
RegisterHotKey(NULL, HOTKEY2, MOD_ALT + MOD_SHIFT, 0x51); // ALT+SHIFT+q
Enfin, dans l'événement principal, surveillez ces touches de raccourci et y répondez:
if (msg.message == HOTKEY1)
{
switch (LOWORD(msg.wParam))
{
case HOTKEY1:
// do such and such
break;
case HOTKEY2:
// do such and such
break
}
}