RegisterHotKey, fonction (winuser.h)

Définit une clé chaude à l’échelle du système.

Syntaxe

BOOL RegisterHotKey(
  [in, optional] HWND hWnd,
  [in]           int  id,
  [in]           UINT fsModifiers,
  [in]           UINT vk
);

Paramètres

[in, optional] hWnd

Type : HWND

Handle vers la fenêtre qui recevra WM_HOTKEY messages générés par la clé chaude. Si ce paramètre est NULL, les messages WM_HOTKEY sont publiés dans la file d’attente des messages du thread appelant et doivent être traités dans la boucle de message.

[in] id

Type : int

Identificateur de la clé chaude. Si le paramètre hWnd a la valeur NULL, la clé chaude est associée au thread actif plutôt qu’à une fenêtre particulière. Si une clé chaude existe déjà avec le même hWnd et id paramètres, consultez Remarques pour l’action effectuée.

[in] fsModifiers

Type : uiNT

Touches qui doivent être enfoncées en combinaison avec la touche spécifiée par le paramètre vk pour générer le message WM_HOTKEY. Le paramètre fsModifiers peut être une combinaison des valeurs suivantes.

valeur Signification
MOD_ALT
0x0001
L’une ou l’autre touche ALT doit être conservée vers le bas.
MOD_CONTROL
0x0002
L’une ou l’autre touche Ctrl doit être conservée enfoncée.
MOD_NOREPEAT
0x4000
Modifie le comportement de la touche d’accès rapide afin que la répétition automatique du clavier ne génère pas plusieurs notifications hotkey.
Windows Vista : Cet indicateur n’est pas pris en charge.
MOD_SHIFT
0x0004
L’une ou l’autre touche MAJ doit être conservée enfoncée.
MOD_WIN
0x0008
L’une ou l’autre clé WINDOWS doit être conservée en panne. Ces clés sont étiquetées avec le logo Windows. Les raccourcis clavier qui impliquent la touche WINDOWS sont réservés à une utilisation par le système d’exploitation.

[in] vk

Type : uiNT

Code de clé virtuelle de la clé chaude. Consultez codes de clé virtuelle.

Valeur de retour

Type : BOOL

Si la fonction réussit, la valeur de retour est différente de zéro.

Si la fonction échoue, la valeur de retour est égale à zéro. Pour obtenir des informations d’erreur étendues, appelez GetLastError.

Cette fonction échoue si vous essayez d’associer une clé chaude à une fenêtre créée par un autre thread.

En règle générale, RegisterHotKey échoue également si les séquences de touches spécifiées pour la touche chaude ont déjà été inscrites pour une autre touche chaude. Toutefois, certaines touches d’accès rapide par défaut préexistantes inscrites par le système d’exploitation (telles que PrintScreen, qui lance l’outil Snipping) peuvent être remplacées par une autre inscription à clé chaude lorsque l’une des fenêtres de l’application est au premier plan.

Remarques

Lorsqu’une touche est enfoncée, le système recherche une correspondance avec toutes les touches chaudes. Lors de la recherche d’une correspondance, le système publie le message WM_HOTKEY dans la file d’attente de messages de la fenêtre avec laquelle la clé chaude est associée. Si la touche chaude n’est pas associée à une fenêtre, le message WM_HOTKEY est publié sur le thread associé à la clé chaude.

Si une clé chaude existe déjà avec les mêmes hWnd et id paramètres, elle est conservée avec la nouvelle clé chaude. L’application doit appeler explicitement UnregisterHotKey pour annuler l’inscription de l’ancienne clé chaude.

La clé F12 est réservée à l’utilisation par le débogueur à tout moment. Elle ne doit donc pas être inscrite en tant que clé chaude. Même si vous ne déboguez pas une application, F12 est réservé au cas où un débogueur en mode noyau ou un débogueur juste-à-temps est résident.

Une application doit spécifier une valeur d’ID dans la plage 0x0000 via 0xBFFF. Une DLL partagée doit spécifier une valeur dans la plage 0xC000 via 0xFFFF (la plage retournée par la fonction GlobalAddAtom). Pour éviter les conflits avec les identificateurs à clé chaude définis par d’autres DLL partagées, une DLL doit utiliser la fonction GlobalAddAtom pour obtenir l’identificateur de clé chaude.

**Windows Server 2003 : **Si une clé chaude existe déjà avec les mêmes hWnd et id paramètres, elle est remplacée par la nouvelle clé chaude.

Exemples

L’exemple suivant montre comment utiliser la fonction RegisterHotKey avec l’indicateur de MOD_NOREPEAT.

Dans cet exemple, la touche d’accès rapide « ALT+b » est inscrite pour le thread principal. Lorsque la touche d’accès rapide est enfoncée, le thread reçoit un message WM_HOTKEY, qui est récupéré dans l’appel GetMessage. Étant donné que cet exemple utilise MOD_ALT avec la valeur MOD_NOREPEAT pour fsModifiers, le thread reçoit uniquement un autre message WM_HOTKEY lorsque la touche « b » est libérée, puis enfoncée pendant que la touche « Alt » est enfoncée.

#include "stdafx.h"

int _cdecl _tmain (
    int argc, 
    TCHAR *argv[])
{           
    if (RegisterHotKey(
        NULL,
        1,
        MOD_ALT | MOD_NOREPEAT,
        0x42))  //0x42 is 'b'
    {
        _tprintf(_T("Hotkey 'ALT+b' registered, using MOD_NOREPEAT flag\n"));
    }
 
    MSG msg = {0};
    while (GetMessage(&msg, NULL, 0, 0) != 0)
    {
        if (msg.message == WM_HOTKEY)
        {
            _tprintf(_T("WM_HOTKEY received\n"));            
        }
    } 
 
    return 0;
}

Exigences

Exigence Valeur
client minimum pris en charge Windows Vista [applications de bureau uniquement]
serveur minimum pris en charge Windows Server 2003 [applications de bureau uniquement]
plateforme cible Windows
d’en-tête winuser.h (include Windows.h)
bibliothèque User32.lib
DLL User32.dll

Voir aussi

GlobalAddAtom

d’entrée clavier

Inscrire une touche d’accès rapide pour l’application actuelle (CSRegisterHotkey)

inscrire la touche d’accès à l’application actuelle (CppRegisterHotkey)

DésinscrireHotKey

WM_HOTKEY