클리엘
CLIEL LAB
클리엘
전체 방문자
오늘
어제
  • 분류 전체보기 (515)
    • Mobile (47)
      • Kotlin (47)
    • Web (84)
      • NestJS (9)
      • HTML5 & CSS3 (38)
      • Javascript (20)
      • TypeScript (6)
      • JQuery (11)
    • .NET (302)
      • C# (85)
      • ASP.NET (67)
      • Windows API for .NET (128)
    • Server (53)
      • SQL Server (10)
      • MariaDB (18)
      • Windows Server (6)
      • node.js (19)
    • System (12)
      • 작업LOG (12)
    • Review (11)
    • ETC (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 블로그 정리

인기 글

태그

  • 변수
  • asp.net core
  • MariaDB
  • c#
  • asp.net core web api
  • Entity Framework
  • exception
  • ASP.NET
  • LINQ
  • Kotlin
  • jQuery
  • NestJS
  • Windows API
  • .NET
  • node.js
  • HTML5
  • CSS3
  • android
  • android studio
  • JavaScript

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
클리엘

CLIEL LAB

.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
저작자표시 비영리 변경금지 (새창열림)

'.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
    '.NET/Windows API for .NET' 카테고리의 다른 글
    • GetComputerName - Computer Name 보기
    • SetFocus - Window Form및 Control Focus 설정
    • UnregisterHotKey - 설정한 Hotkey의 해제
    • SetActiveWindow - Windows 최상위 활성화
    클리엘
    클리엘
    누구냐 넌?

    티스토리툴바