Función RegisterHotKey (winuser.h)

Define una tecla de acceso rápido para todo el sistema.

Sintaxis

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

Parámetros

[in, optional] hWnd

Tipo: HWND

Identificador de la ventana que recibirá WM_HOTKEY mensajes generados por la clave activa. Si este parámetro es NULL, WM_HOTKEY mensajes se publican en la cola de mensajes del subproceso de llamada y se deben procesar en el bucle de mensajes.

[in] id

Tipo: int

Identificador de la clave activa. Si el parámetro hWnd es NULL, la clave activa se asocia con el subproceso actual en lugar de con una ventana determinada. Si ya existe una clave activa con los mismos parámetros hWnd e id , vea Comentarios para la acción realizada.

[in] fsModifiers

Tipo: UINT

Teclas que se deben presionar en combinación con la tecla especificada por el parámetro vk para generar el mensaje de WM_HOTKEY . El parámetro fsModifiers puede ser una combinación de los valores siguientes.

Valor Significado
MOD_ALT
0x0001
Cualquier tecla ALT debe mantenerse presionada.
MOD_CONTROL
0x0002
Se debe mantener presionada la tecla CTRL.
MOD_NOREPEAT
0x4000
Cambia el comportamiento de la tecla de acceso rápido para que el teclado repita automáticamente no produzca varias notificaciones de tecla de acceso rápido.

Windows Vista: Esta marca no se admite.

MOD_SHIFT
0x0004
Se debe mantener presionada la tecla MAYÚS.
MOD_WIN
0x0008
Se ha presionado cualquier tecla WINDOWS. Estas teclas están etiquetadas con el logotipo de Windows. Los métodos abreviados de teclado que implican la tecla WINDOWS están reservados para su uso por parte del sistema operativo.

[in] vk

Tipo: UINT

El código de clave virtual de la clave activa. Consulte Códigos de clave virtual.

Valor devuelto

Tipo: BOOL

Si la función se realiza correctamente, el valor devuelto es distinto de cero.

Si la función no se realiza correctamente, el valor devuelto es cero. Para obtener información de error extendida, llame a GetLastError.

Comentarios

Cuando se presiona una tecla, el sistema busca una coincidencia con todas las teclas de acceso rápido. Después de encontrar una coincidencia, el sistema envía el mensaje WM_HOTKEY a la cola de mensajes de la ventana con la que está asociada la clave activa. Si la tecla activa no está asociada a una ventana, el mensaje de WM_HOTKEY se publica en el subproceso asociado a la clave activa.

Esta función no puede asociar una clave activa a una ventana creada por otro subproceso.

RegisterHotKey produce un error si otra tecla ha registrado las pulsaciones de tecla especificadas para la tecla activa.

Si ya existe una clave activa con los mismos parámetros hWnd e id , se mantiene junto con la nueva clave activa. La aplicación debe llamar explícitamente a UnregisterHotKey para anular el registro de la clave activa antigua.

Windows Server 2003: Si ya existe una clave activa con los mismos parámetros hWnd e id , se reemplaza por la nueva clave activa.

La clave F12 está reservada para su uso por el depurador en todo momento, por lo que no debe registrarse como una clave activa. Incluso cuando no se depura una aplicación, F12 se reserva en caso de que un depurador en modo kernel o un depurador Just-In-Time esté residente.

Una aplicación debe especificar un valor id en el intervalo 0x0000 a través de 0xBFFF. Un archivo DLL compartido debe especificar un valor en el intervalo 0xC000 a través de 0xFFFF (el intervalo devuelto por la función GlobalAddAtom ). Para evitar conflictos con identificadores de clave activa definidos por otros archivos DLL compartidos, un archivo DLL debe usar la función GlobalAddAtom para obtener el identificador de clave activa.

Ejemplos

En el ejemplo siguiente se muestra cómo usar la función RegisterHotKey con la marca MOD_NOREPEAT . En este ejemplo, la tecla de acceso rápido "ALT+b" está registrada para el subproceso principal. Cuando se presiona la tecla de acceso rápido, el subproceso recibirá un mensaje de WM_HOTKEY , que se recogerá en la llamada GetMessage . Dado que en este ejemplo se usa MOD_ALT con el valor de MOD_NOREPEAT para fsModifiers, el subproceso solo recibirá otro mensaje de WM_HOTKEY cuando se libere la tecla 'b' y vuelva a presionarse mientras se presiona la tecla 'ALT'.


#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;
}

Requisitos

Requisito Value
Cliente mínimo compatible Windows Vista [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado winuser.h (incluya Windows.h)
Library User32.lib
Archivo DLL User32.dll

Consulte también

Conceptual

GlobalAddAtom

Entrada de teclado

Referencia

Registrar la tecla de acceso rápido para la aplicación actual (CSRegisterHotkey)

Registrar la clave de acceso rápido para la aplicación actual (CppRegisterHotkey)

Registrar la clave de acceso rápido para la aplicación actual (VBRegisterHotkey)

Muestras

UnregisterHotKey

WM_HOTKEY