[C#/API] Gloobal Hotkey(핫키) 등록하기 (RegisterHotKey, UnregisterHotKey)

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 )

메모장이 실행된 것을 확인할 수 있다


 

댓글

Designed by JB FACTORY