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 매개 변수는 다음 값의 조합일 수 있습니다.
[in] vk
형식: UINT
핫 키의 가상 키 코드입니다. 가상 키 코드를 참조하세요.
반환 값
형식: BOOL
함수가 성공하면 반환 값이 0이 아닙니다.
함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.
설명
키를 누르면 시스템에서 모든 핫 키에 대한 일치 항목을 찾습니다. 일치 항목을 찾으면 시스템에서 WM_HOTKEY 메시지를 핫 키가 연결된 창의 메시지 큐에 게시합니다. 핫 키가 창과 연결되지 않은 경우 WM_HOTKEY 메시지가 핫 키와 연결된 스레드에 게시됩니다.
이 함수는 핫 키를 다른 스레드에서 만든 창과 연결할 수 없습니다.
핫 키에 대해 지정된 키 입력이 이미 다른 핫 키에 의해 등록된 경우 RegisterHotKey가 실패합니다.
동일한 hWnd 및 ID 매개 변수를 사용하여 핫 키가 이미 있는 경우 새 핫 키와 함께 유지 관리됩니다. 애플리케이션은 UnregisterHotKey 를 명시적으로 호출하여 이전 핫 키의 등록을 취소해야 합니다.
Windows Server 2003: 동일한 hWnd 및 ID 매개 변수를 사용하여 핫 키가 이미 있는 경우 새 핫 키로 대체됩니다.
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 |
추가 정보
개념
참조
현재 앱에 대한 핫키 등록(CSRegisterHotkey)
현재 앱에 대한 핫키 등록(CppRegisterHotkey)
현재 앱에 대한 핫키 등록(VBRegisterHotkey)
샘플
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기