C#으로 윈도우 핫키 등록하는 방법
RegisterHotKey() 함수로 핫키를 등록하고 UnregisterHotKey() 함수로 핫키를 해제 할 수 있다
조합키로 핫키를 등록할 수 있고 단일키로도 핫키를 사용할 수 있다
소스파일 : GlobalHotkey.zip
<소스코드>
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace GlobalHotkey
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
[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);
const int HOTKEY_ID = 31197; //Any number to use to identify the hotkey instance
public enum KeyModifiers
{
None = 0,
Alt = 1,
Control = 2,
Shift = 4,
Windows = 8
}
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);
//MessageBox.Show("HotKey Pressed :" + modifier.ToString() + " " + key.ToString());
if ((KeyModifiers.Control | KeyModifiers.Shift) == modifier && Keys.N == key)
{
Process.Start("notepad.exe");
}
break;
}
base.WndProc(ref message);
}
private void button1_Click(object sender, EventArgs e)
{
// 핫키 등록
RegisterHotKey(this.Handle, HOTKEY_ID, KeyModifiers.Control | KeyModifiers.Shift, Keys.N);
}
private void button2_Click(object sender, EventArgs e)
{
//핫키 해제
UnregisterHotKey(this.Handle, HOTKEY_ID);
}
}
}
RegisterHotKey 버튼을 클릭하여 핫키를 등록하자
글로벌 핫키를 등록하였기 때문에 윈도우에서 다른 작업을 하다가 핫키를 누르면 메모장이 실행 된다
핫키를 눌러보자 ( Ctrl + Shift + N )
메모장이 실행된 것을 확인할 수 있다