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의 해제
'.NET > Windows API for .NET' 카테고리의 다른 글
GetComputerName - Computer Name 보기 (0) | 2019.08.12 |
---|---|
SetFocus - Window Form및 Control Focus 설정 (0) | 2019.08.12 |
UnregisterHotKey - 설정한 Hotkey의 해제 (0) | 2019.08.12 |
SetActiveWindow - Windows 최상위 활성화 (0) | 2019.08.12 |
OemKeyScan - OEM Ascii Code의 OEM Scan Code변환 (0) | 2019.08.12 |