当前位置:首页 > 编程语言 > C# > 正文内容

C# 热键

C#2年前 (2022-11-03)
API    
/// <summary>
/// 注册定义系统范围的热键。失败会设置GetLastError,如果GetLastError等于ERROR_HOTKEY_ALREADY_REGISTERED,表示热键被占用,
/// </summary>
/// <param name="hWnd">要定义热键的窗口的句柄</param>
/// <param name="id">定义热键ID,不能与其它ID重复</param>
/// <param name="fsModifiers">以MOD_开头的常量,标识热键是否在按Alt、Ctrl、Shift、Windows等键时才会生效</param>
/// <param name="vk">定义的热键</param>
/// <returns></returns>
[DllImport("user32.dll", SetLastError = true)]
public static extern bool RegisterHotKey(IntPtr hWnd,int id, int fsModifiers,int vk );
/// <summary>
/// 注销以前由调用线程注册的热键。
/// </summary>
/// <param name="hWnd">要取消热键的窗口的句柄</param>
/// <param name="id">取消定义的热键ID</param>
/// <returns></returns>
[DllImport("user32.dll", SetLastError = true)]
public static extern bool UnregisterHotKey(IntPtr hWnd,int id);


常量    
/// <summary>
/// 1409-表示热键被占用
/// </summary>
public const int ERROR_HOTKEY_ALREADY_REGISTERED = 0x0581;
/// <summary>
/// 1-按住ALT键。
/// </summary>
public const int MOD_ALT = 0x0001;
/// <summary>
/// 2-按住CTRL键。
/// </summary>
public const int MOD_CONTROL = 0x0002;
/// <summary>
/// 16384-更改热键行为,长按键盘时不会产生多个热键通知。
/// </summary>
public const int MOD_NOREPEAT = 0x4000;
/// <summary>
/// 4-按住SHIFT键。
/// </summary>
public const int MOD_SHIFT = 0x0004;
/// <summary>
/// 8-按住WINDOWS键。这些键标有Windows徽标。涉及WINDOWS键的键盘快捷方式保留供操作系统使用。
/// </summary>
public const int MOD_WIN = 0x0008;
/// <summary>
/// 789-当用户按下由RegisterHotKey函数注册的热键时提交此消息
/// </summary>
public const int WM_HOTKEY = 0x0312;


使用    
        /// <summary>
        /// ↑键ID
        /// </summary>
        private const int keyUP = 65536;
        /// <summary>
        /// →键ID
        /// </summary>
        private const int keyRight = 65537;
        /// <summary>
        /// ↓键ID
        /// </summary>
        private const int keyDown = 65538; 
        /// <summary>
        /// ←键ID
        /// </summary>
        private const int keyLeft = 65539;

        private void Form1_Load(object sender, EventArgs e)
        {
            hookkey.RegisterHotKey(this.Handle, keyUP, Cor.Constant.MOD_CONTROL | Cor.Constant.MOD_NOREPEAT ,(int) Keys.Up);
            hookkey.RegisterHotKey(this.Handle, keyRight, Cor.Constant.MOD_CONTROL, (int)Keys.Right);
            hookkey.RegisterHotKey(this.Handle, keyDown, Cor.Constant.MOD_CONTROL, (int)Keys.Down);
            hookkey.RegisterHotKey(this.Handle, keyLeft, Cor.Constant.MOD_CONTROL, (int)Keys.Left);
        }
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            hookkey.UnregisterHotKey(this.Handle, keyUP);
            hookkey.UnregisterHotKey(this.Handle, keyRight);
            hookkey.UnregisterHotKey(this.Handle, keyDown);
            hookkey.UnregisterHotKey(this.Handle, keyLeft);
        }

        protected override void WndProc(ref Message m)
        {
            base.WndProc(ref m);

            switch (m.Msg)

            {
                case Cor.Constant.WM_HOTKEY: 
                    switch (m.WParam.ToInt32())
                    {
                        case keyUP: //热键ID
                            MessageBox.Show("上");
                            break;
                        case keyRight: //热键ID
                            MessageBox.Show("右");
                            break;
                        case keyDown: //热键ID
                            MessageBox.Show("下");
                            break;
                        case keyLeft: //热键ID
                            MessageBox.Show("右");
                            break;
                        default:
                            break;
                    }
                    break;
            }
        }



相关文章

C# 复制图片到剪贴板

Clipboard.SetImage(pictureBox1.Image);...

C# 标准日期和时间格式说明符

Code说明Write备注Y年月2022年7月y标准日期和时间格式说明符2022年7月单独使用时y年...

DotfuscatorPro使用教程

DotfuscatorPro使用教程

1首次使用,添加反编译工具路径ILASM_v4.0.30319C:\Windows\Microsof...

C# 时间操作

获取系统已运行时间    System.Environment.Tic...

C# 结构体struct 例子

/// <summary> /// 结构体 /// &...