출처 : https://www.fluxbytes.com/csharp/how-to-register-a-global-hotkey-for-your-application-in-c/

출처2 : https://stackoverflow.com/questions/400113/best-way-to-implement-keyboard-shortcuts-in-a-windows-forms-application/400325#400325





2016/08/26 - [프로그램 자료/Visual C#] - 글로벌 키보드/마우스 후킹 훅킹 Global Hook





using System;

using System.Windows.Forms;

 

namespace GlobalHotkeyExampleForm

{

    public partial class ExampleForm : Form

    {

        [System.Runtime.InteropServices.DllImport("user32.dll")]

        private static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vk);

        [System.Runtime.InteropServices.DllImport("user32.dll")]

        private static extern bool UnregisterHotKey(IntPtr hWnd, int id);

 

        enum KeyModifier

        {

            None = 0,

            Alt = 1,

            Control = 2,

            Shift = 4,

            WinKey = 8

        }

 

        public ExampleForm()

        {

            InitializeComponent();

 

            // The id of the hotkey.

            int id = 0;

            // Register Shift + A as global hotkey.

            RegisterHotKey(this.Handle, id, (int)KeyModifier.Shift, Keys.A.GetHashCode());

        }

 

        protected override void WndProc(ref Message m)

        {

            base.WndProc(ref m);

 

            if (m.Msg == 0x0312)

            {

                /* Note that the three lines below are not needed if you only want to register one hotkey.

                 * The below lines are useful in case you want to register multiple keys, which you can use a switch with the id as argument, or if you want to know which key/modifier was pressed for some particular reason. */

 

                // The key of the hotkey that was pressed.

                Keys key = (Keys)(((int)m.LParam >> 16) & 0xFFFF);

                // The modifier of the hotkey that was pressed.

                KeyModifier modifier = (KeyModifier)((int)m.LParam & 0xFFFF);

                // The id of the hotkey that was pressed.

                int id = m.WParam.ToInt32();

 

                MessageBox.Show("Hotkey has been pressed!");

                // do something

            }

        }

 

        private void ExampleForm_FormClosing(object sender, FormClosingEventArgs e)

        {

            // Unregister hotkey with id 0 before closing the form. You might want to call this more than once with different id values if you are planning to register more than one hotkey.

            UnregisterHotKey(this.Handle, 0);

        }

    }

}














Posted by motolies
,