RegisterHotKey, fonction (winuser.h)

Définit une touche d’accès rapide à 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 de la fenêtre qui recevra WM_HOTKEY messages générés par la touche d’accès rapide. Si ce paramètre a la valeur NULL, WM_HOTKEY messages 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 touche d’accès rapide. Si le paramètre hWnd a la valeur NULL, la touche d’accès rapide est associée au thread actuel plutôt qu’à une fenêtre particulière. S’il existe déjà une touche d’accès rapide avec les mêmes paramètres hWnd et id , 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 afin de 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 des touches ALT doit être maintenue enfoncée.
MOD_CONTROL
0x0002
L’une ou l’autre touche CTRL doit être maintenue enfoncée.
MOD_NOREPEAT
0x4000
Modifie le comportement des touches d’accès rapide afin que la répétition automatique du clavier ne génère pas plusieurs notifications de touches d’accès rapide.

Windows Vista : Cet indicateur n’est pas pris en charge.

MOD_SHIFT
0x0004
L’une ou l’autre des touches MAJ doit être maintenue enfoncée.
MOD_WIN
0x0008
L’une des touches Windows a été maintenue enfoncée. Ces touches sont étiquetées avec le logo Windows. Les raccourcis clavier qui impliquent la touche WINDOWS sont réservés au système d’exploitation.

[in] vk

Type : UINT

Code de clé virtuelle de la touche d’accès rapide. Consultez Codes de clé virtuelle.

Valeur retournée

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étaillées sur l’erreur, appelez GetLastError.

Remarques

Lorsqu’une touche est enfoncée, le système recherche une correspondance avec toutes les touches d’accès rapide. Après avoir trouvé une correspondance, le système publie le message WM_HOTKEY dans la file d’attente des messages de la fenêtre à laquelle la clé d’accès rapide est associée. Si la touche d’accès rapide n’est pas associée à une fenêtre, le message WM_HOTKEY est publié dans le thread associé à la touche d’accès rapide.

Cette fonction ne peut pas associer une touche d’accès rapide à une fenêtre créée par un autre thread.

RegisterHotKey échoue si les séquences de touches spécifiées pour la touche d’accès rapide ont déjà été inscrites par une autre touche d’accès rapide.

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

Windows Server 2003 : S’il existe déjà une touche d’accès rapide avec les mêmes paramètres hWnd et id , elle est remplacée par la nouvelle clé rapide.

La clé F12 étant réservée à l’utilisation par le débogueur à tout moment, elle ne doit pas être inscrite en tant que clé d’accès rapide. Même lorsque 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 (plage retournée par la fonction GlobalAddAtom ). Pour éviter les conflits avec les identificateurs de clé d’accès rapide définis par d’autres DLL partagées, une DLL doit utiliser la fonction GlobalAddAtom pour obtenir l’identificateur de clé d’accès rapide.

Exemples

L’exemple suivant montre comment utiliser la fonction RegisterHotKey avec l’indicateur MOD_NOREPEAT . Dans cet exemple, la touche d’accès rapide « ALT+b » est inscrite pour le thread main. 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 ne reçoit un autre message WM_HOTKEY que lorsque la touche « b » est relâchée, puis enfoncée à nouveau 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;
}

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows Vista [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
Plateforme cible Windows
En-tête winuser.h (inclure Windows.h)
Bibliothèque User32.lib
DLL User32.dll

Voir aussi

Conceptuel

GlobalAddAtom

Entrées du clavier

Référence

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

Inscrire la touche d’accès rapide pour l’application active (CppRegisterHotkey)

Inscrire la touche d’accès rapide pour l’application active (VBRegisterHotkey)

Exemples

UnregisterHotKey

WM_HOTKEY