.NET/Windows API for .NET

RegisterHotKey - Windows Hotkey 설정

클리엘 2019. 8. 12. 13:05
728x90

RegisterHotKey함수는 특정 Key의 조합으로 Hotkey를 설정하여 특정 Process나 Software에 설정한 Hotkey를 활용할 수 있도록 합니다.

Declare Function RegisterHotKey Lib "user32" Alias "RegisterHotKey" (ByVal hwnd As Integer, ByVal id As Integer, ByVal fsModifiers As Integer, ByVal vk As Integer) As Integer

▶VB.NET 선언

RegisterHotKey(handle, id, mod_key, key)

▶VB.NET 호출

[DllImport("user32.dll")]
private static extern int RegisterHotKey(int hwnd, int id, int fsModifiers, int vk);

▶C# 선언

RegisterHotKey(handle, id, mod_key, key);

▶C# 호출


함수를 호출할때 전달하는 인수중 Handle은 설정한 Hotkey가 눌려졌을때 Key의 Message를 받을 Form이나 기타 Object의  Handle값을 전달하면 됩니다.

id는 설정한 Hotkey를 구분할 수 있는 고유의 값으로 임의의 정수값을 설정합니다. 이 값은 설정한 Hotkey를 해제할때 사용됩니다.

mod_key는 설정하고자 하는 Hotkey와 같이 사용될 Key를 지정하는 것으로 다음 값을 사용할 수 있습니다.

 상수명  값(VB.NET / C# / 정수)  Key
 MOD_ALT  &H1 / 0x1 / 1  Alt
 MOD_CONTROL  &H2 / 0x2 / 2  Ctrl
 MOD_SHIFT  &H3 / 0x3 / 3  Shift


마지막으로 vk는 가상키를 의미합니다. 이 Key의 설정은 .NET의 Keys 상수를 이용하여 설정하시면 됩니다.

위 설정값대로 함수를 호출하면 다음과 같이 기술될 수 있습니다.

RegisterHotKey(Me.Handle, 1122, MOD_CONTROL, Keys.A)

▶VB.NET

RegisterHotKey((int)this.Handle, 1122, MOD_CONTROL, (int)Keys.A);

▶C#


함수호출 내용은 Ctrl(Control) Key와 A Key가 같이 눌려졌을때의 Hotkey를 설정하는 예제입니다.

설정한 Hotkey가 눌려지면 Windows는 해당 Hotkey가 눌려 졌다는 특정 Message를 발생시키게 됩니다. 이때 이 함수가 어떤 WinForm에서 작성되는 경우라면 설정한 Hotkey가 눌려졌을때 Hotkey가 눌려졌다는 Event Message를 해당 Program이 운영체제로부터 받아야 할 필요가 있습니다.

Hotkey Message를 Program이 받을 수 있도록 처리하려면 다음과 같이 WndProc함수를 사용하여 Form이 받는 Message를 별도로 처리할 수 있도록 해야 합니다.

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
        MyBase.WndProc(m)
End Sub

▶VB.NET

protected override void WndProc(ref Message m)
{
    base.WndProc(ref m);
}

▶C#


Hotkey가 눌려지면 Program은 Windows로 부터 312 정수값을 받게 됩니다. 따라서 위 함수내에 다음과 같이 작성하여 Hotkey가 눌려졌을때 특정 동작을 수행하도록 하면 됩니다.

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
        MyBase.WndProc(m)
        If (m.Msg = CInt(&H312)) Then
            MessageBox.Show("Hotkey가 눌려짐")
        End If
End Sub

▶VB.NET

protected override void WndProc(ref Message m)
{
    base.WndProc(ref m);
           
    if (m.Msg == (int)0x312){
        MessageBox.Show("Hotkey가 눌려짐");
    }
}

▶C#


Hotkey의 설정을 해제하는 방법에 대해서는 다음 글을 참고해 주십시오.

[Windows API for .NET] - UnregisterHotKey - 설정한 Hotkey의 해제

728x90