RegisterHotKey 함수(winuser.h)

시스템 전체 핫 키를 정의합니다.

구문

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

매개 변수

[in, optional] hWnd

형식: HWND

핫 키에서 생성된 WM_HOTKEY 메시지를 수신할 창에 대한 핸들입니다. 이 매개 변수가 NULL인 경우 WM_HOTKEY 메시지는 호출 스레드의 메시지 큐에 게시되며 메시지 루프에서 처리되어야 합니다.

[in] id

형식: int

핫 키의 식별자입니다. hWnd 매개 변수가 NULL인 경우 핫 키는 특정 창이 아닌 현재 스레드와 연결됩니다. 동일한 hWndID 매개 변수를 사용하여 핫 키가 이미 있는 경우 수행된 작업에 대한 설명을 참조하세요.

[in] fsModifiers

형식: UINT

WM_HOTKEY 메시지를 생성하기 위해 vk 매개 변수에서 지정한 키와 함께 눌러야 하는 키입니다. fsModifiers 매개 변수는 다음 값의 조합일 수 있습니다.

의미
MOD_ALT
0x0001
ALT 키 중 하나를 눌러야 합니다.
MOD_CONTROL
0x0002
CTRL 키 중 하나를 눌러야 합니다.
MOD_NOREPEAT
0x4000
키보드 자동 반복이 여러 핫키 알림을 생성하지 않도록 핫키 동작을 변경합니다.

Windows Vista: 이 플래그는 지원되지 않습니다.

MOD_SHIFT
0x0004
SHIFT 키 중 하나를 눌러야 합니다.
MOD_WIN
0x0008
두 WINDOWS 키 중 하나가 눌려져 있습니다. 이 키에는 Windows 로고가 그려져 있습니다. WINDOWS 키를 포함하는 바로 가기 키는 운영 체제에서 사용하도록 예약되어 있습니다.

[in] vk

형식: UINT

핫 키의 가상 키 코드입니다. 가상 키 코드를 참조하세요.

반환 값

형식: BOOL

함수가 성공하면 반환 값이 0이 아닙니다.

함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

설명

키를 누르면 시스템에서 모든 핫 키에 대한 일치 항목을 찾습니다. 일치 항목을 찾으면 시스템에서 WM_HOTKEY 메시지를 핫 키가 연결된 창의 메시지 큐에 게시합니다. 핫 키가 창과 연결되지 않은 경우 WM_HOTKEY 메시지가 핫 키와 연결된 스레드에 게시됩니다.

이 함수는 핫 키를 다른 스레드에서 만든 창과 연결할 수 없습니다.

핫 키에 대해 지정된 키 입력이 이미 다른 핫 키에 의해 등록된 경우 RegisterHotKey가 실패합니다.

동일한 hWndID 매개 변수를 사용하여 핫 키가 이미 있는 경우 새 핫 키와 함께 유지 관리됩니다. 애플리케이션은 UnregisterHotKey 를 명시적으로 호출하여 이전 핫 키의 등록을 취소해야 합니다.

Windows Server 2003: 동일한 hWndID 매개 변수를 사용하여 핫 키가 이미 있는 경우 새 핫 키로 대체됩니다.

F12 키는 디버거에서 항상 사용하도록 예약되어 있으므로 핫 키로 등록해서는 안 됩니다. 애플리케이션을 디버깅하지 않더라도 커널 모드 디버거 또는 Just-In-Time 디버거가 상주하는 경우 F12가 예약됩니다.

애플리케이션은 0xBFFF 통해 0x0000 범위에서 ID 값을 지정해야 합니다. 공유 DLL은 0xFFFF( GlobalAddAtom 함수에서 반환된 범위)를 통해 0xC000 범위의 값을 지정해야 합니다. 다른 공유 DLL에서 정의한 핫 키 식별자와의 충돌을 방지하려면 DLL이 GlobalAddAtom 함수를 사용하여 핫 키 식별자를 가져와야 합니다.

예제

다음 예제에서는 MOD_NOREPEAT 플래그와 함께 RegisterHotKey 함수를 사용하는 방법을 보여줍니다. 이 예제에서는 'ALT+b' 바로 가기 키가 기본 스레드에 등록됩니다. 핫키를 누르면 스레드는 WM_HOTKEY 메시지를 받게 되며 GetMessage 호출에서 선택됩니다. 이 예제에서는 fsModifiers에 대한 MOD_NOREPEAT 값이 있는 MOD_ALT 사용하므로 스레드는 'b' 키가 해제된 후 'ALT' 키를 누를 때 다시 누를 때만 다른 WM_HOTKEY 메시지를 받습니다.


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

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 winuser.h(Windows.h 포함)
라이브러리 User32.lib
DLL User32.dll

추가 정보

개념

GlobalAddAtom

키보드 입력

참조

현재 앱에 대한 핫키 등록(CSRegisterHotkey)

현재 앱에 대한 핫키 등록(CppRegisterHotkey)

현재 앱에 대한 핫키 등록(VBRegisterHotkey)

샘플

UnregisterHotKey

WM_HOTKEY