C# 애플리케이션에서 HotKey 설정하는 방법에 대해 설명합니다.
HotKey는 일반적으로 단축키로 알려진 기능이며 프로그램 실행후 언제든지 해당 키보드의 키를 누르면 정해진 동작이 실행되는 기능을 말합니다.
C# 애플리케이션에서 HotKey 설정은 의외로 간단한데 User32.dll을 DllImport를 한 후 RegisterHotKey, UnregisterHotKey 메서드를 사용하면 쉽게 단축키의 등록 및 해제가 가능합니다.
간단히 HotKey 테스트를 위해 .NETFrameWork를 사용하는 Form을 아래와 같이 작성하였습니다.
HotKey 메서드 호출
먼저 User32.dll을 DllImport하여 RegisterHotKey, UnregisterHotKey 메서드를 호출할 수 있도록 설정해 줍니다.
const int HOTKEY_ID = 123123; public enum KeyModifiers { None = 0, Alt = 1, Control = 2, Shift = 4, Windows = 8 } [DllImport("user32.dll")] public static extern bool RegisterHotKey(IntPtr hWnd, int id, KeyModifiers fsModifiers, Keys vk); [DllImport("user32.dll")] public static extern bool UnregisterHotKey(IntPtr hWnd, int id);
위 RegisterHotKey 메서드의 파라미터값을 보면 등록에 필요한 ID값은 임의값(123123)을 사용하였고, Modifiers값은 아래 테이블 값을 참고하시면 됩니다.
참고 URL : https://learn.microsoft.com/ko-kr/windows/win32/inputdev/wm-hotkey
+-------------+--------+--------------------------------------+ | MOD_ALT | 0x0001 | ALT 키 중 하나가 눌려져 있습니다. | +-------------+--------+--------------------------------------+ | MOD_CONTROL | 0x0002 | CTRL 키 중 하나가 눌려져 있습니다. | +-------------+--------+--------------------------------------+ | MOD_SHIFT | 0x0004 | SHIFT 키 중 하나가 눌려져 있습니다. | +-------------+--------+--------------------------------------+ | MOD_WIN | 0x0008 | 두 WINDOWS 키 중 하나가 눌려져 있습니다. | +-------------+--------+--------------------------------------+
마지막 파라미터인 Keys값은 가상 키값을 설정하면 됩니다.
참고 URL : https://learn.microsoft.com/ko-kr/windows/win32/inputdev/virtual-key-codes
단축키 등록 및 해제
제 경우 Form이 생성/해제되는 이벤트에서 단축키를 등록/해제하도록 하였습니다.
아래 소스 코드는 KeyModifiers.Control + KeyModifiers.Shift + Keys.N의 단축키를 등록한 예제입니다.
private void Form1_Load(object sender, EventArgs e) { RegisterHotKey(this.Handle, HOTKEY_ID, KeyModifiers.Control | KeyModifiers.Shift, Keys.N); } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { UnregisterHotKey(this.Handle, HOTKEY_ID); }
HotKey 메시지 핸들링
위와 같이 HotKey를 등록후 실제 HotKey 메시지를 수신하여 단축키를 확인 후 해당 동작이 수행되도록 작성하시면 됩니다.
여기서는 KeyModifiers.Control + KeyModifiers.Shift + Keys.N 인 경우 노트패드 프로그램을 실행하도록 하였습니다.
참고 URL : https://learn.microsoft.com/ko-kr/windows/win32/inputdev/wm-hotkey
const int WM_HOTKEY = 0x0312; protected override void WndProc(ref Message message) { switch (message.Msg) { case WM_HOTKEY: Keys key = (Keys)(((int)message.LParam >> 16) & 0xFFFF); KeyModifiers modifier = (KeyModifiers)((int)message.LParam & 0xFFFF); if ((KeyModifiers.Control | KeyModifiers.Shift) == modifier && Keys.N == key) { Process.Start("notepad.exe"); } break; } base.WndProc(ref message); }
위와 같이 작성후 실행해 보면 아래 이미지의 왼쪽과 같이 실행되는데 HotKey인 Ctrl + Shift + N 키를 누르면 Windows 메모장이 실행되는것을 확인할 수 있습니다.
몇 줄 안되는 코드로 간단히 C# 프로그램에서 단축키를 설정하여 동작시킬 수 있었습니다.
간단하면서도 매우 유용한 기능으로 많이 활용할 수 있을것 같습니다.