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
[in] id
형식: int
핫 키의 식별자입니다.
hWnd 매개 변수가 NULL이면 핫 키는 특정 창이 아닌 현재 스레드와 연결됩니다. hWnd 및
[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
발언
키를 누르면 시스템에서 모든 핫 키와 일치하는 항목을 찾습니다. 일치 항목을 찾으면 시스템에서 WM_HOTKEY 메시지를 핫 키가 연결된 창의 메시지 큐에 게시합니다. 핫 키가 창과 연결되지 않은 경우 WM_HOTKEY 메시지가 핫 키와 연결된 스레드에 게시됩니다.
hWnd 및
F12 키는 디버거에서 항상 사용하도록 예약되어 있으므로 핫 키로 등록해서는 안 됩니다. 애플리케이션을 디버깅하지 않는 경우에도 F12는 커널 모드 디버거 또는 Just-In-Time 디버거가 상주하는 경우에 예약됩니다.
애플리케이션은 0xBFFF 0x0000 범위에서 ID 값을 지정해야 합니다. 공유 DLL은 0xFFFF(GlobalAddAtom 함수에서 반환된 범위)를 통해 0xC000 범위의 값을 지정해야 합니다. 다른 공유 DLL에서 정의한 핫 키 식별자와의 충돌을 방지하려면 DLL은 GlobalAddAtom 함수를 사용하여 핫 키 식별자를 가져와야 합니다.
**Windows Server 2003: **hWnd 및
예제
다음 예제에서는 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 |
참고 항목
키보드 입력
현재 앱에 대한 핫키 등록(CSRegisterHotkey)
현재 앱에 대한 핫키 등록(CppRegisterHotkey)
UnregisterHotKey