다음을 통해 공유


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이면 핫 키는 특정 창이 아닌 현재 스레드와 연결됩니다. hWnd 및 id 매개 변수와 동일한 핫 키가 이미 있는 경우 수행된 작업에 대한 비고를 참조하세요.

[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호출합니다.

다른 스레드에서 만든 창과 핫 키를 연결하려고 하면 이 함수가 실패합니다.

일반적으로 핫 키에 지정된 키 입력이 다른 핫 키에 대해 이미 등록된 경우에도 registerHotKey 실패합니다. 그러나 OS에 의해 등록된 일부 기존 기본 바로 가기 키(예: 코드 조각 도구를 시작하는 PrintScreen)는 앱의 창 중 하나가 포그라운드에 있을 때 다른 핫 키 등록에 의해 재정의될 수 있습니다.

발언

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

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

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

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

**Windows Server 2003: **hWnd 및 id 매개 변수와 동일한 핫 키가 이미 있는 경우 새 핫 키로 바뀝니다.

예제

다음 예제에서는 MOD_NOREPEAT 플래그와 함께 RegisterHotKey 함수를 사용하는 방법을 보여줍니다.

이 예제에서는 'ALT+b' 바로 가기 키가 주 스레드에 대해 등록됩니다. 바로 가기 키를 누르면 스레드는 WM_HOTKEY 메시지를 받게 되며, 이 메시지는 GetMessage 호출에서 선택됩니다. 이 예제에서는 fsModifiersMOD_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)

UnregisterHotKey

WM_HOTKEY