zoukankan      html  css  js  c++  java
  • winform设置快捷键

            #region 设置快捷键
            #region 1、注册API
    
            //如果函数执行成功,返回值不为0。
            //如果函数执行失败,返回值为0。要得到扩展错误信息,调用GetLastError。
            [DllImport("user32.dll", SetLastError = true)]
            public static extern bool RegisterHotKey(
                IntPtr hWnd,                //要定义热键的窗口的句柄
                int id,                     //定义热键ID(不能与其它ID重复)           
                KeyModifiers fsModifiers,   //标识热键是否在按Alt、Ctrl、Shift、Windows等键时才会生效
                Keys vk                     //定义热键的内容
                );
    
            [DllImport("user32.dll", SetLastError = true)]
            public static extern bool UnregisterHotKey(
                IntPtr hWnd,                //要取消热键的窗口的句柄
                int id                      //要取消热键的ID
                );
    
            //定义了辅助键的名称(将数字转变为字符以便于记忆,也可去除此枚举而直接使用数值)
            [Flags()]
            public enum KeyModifiers
            {
                None = 0,
                Alt = 1,
                Ctrl = 2,
                Shift = 4,
                WindowsKey = 8
            }
            
            #endregion
            #region 2、注册热键
            /// <summary>
            /// 窗体热键,仅在当前窗体时起作用
            /// </summary>
            void RegistHotKey()
            {
                //注册热键Ctrl+S,Id号为100。
                RegisterHotKey(Handle, 100, KeyModifiers.Ctrl, Keys.S);
                RegisterHotKey(Handle, 101, KeyModifiers.Ctrl, Keys.R);
                RegisterHotKey(Handle, 102, KeyModifiers.Ctrl, Keys.Left);
                RegisterHotKey(Handle, 103, KeyModifiers.Ctrl, Keys.Right);
                RegisterHotKey(Handle, 104, KeyModifiers.Ctrl, Keys.Home);
                RegisterHotKey(Handle, 105, KeyModifiers.Ctrl, Keys.End);
                RegisterHotKey(Handle, 106, KeyModifiers.Ctrl, Keys.Delete);//删除历史记录
            }
            /// <summary>
            /// 全局的热键,程序启动后就一直起作用
            /// </summary>
            void PublicRegistHotKey()
            {
                RegisterHotKey(Handle, 107, KeyModifiers.Alt, Keys.H);//隐藏/显示界面
            }
            //记得初始化的时间调用RegistHotKey 如:
            /*
            private void Form1_Load(object sender, EventArgs e)
            {
                RegistHotKey();
            }
            */
            #endregion
            #region 3、重载WndProc方法,用于实现热键响应
            /// <summary>
            /// 重载WndProc方法,用于实现热键响应
            /// </summary>
            /// <param name="m"></param>
            protected override void WndProc(ref Message m)
            {
                const int WM_HOTKEY = 0x0312;
                //按快捷键 
                switch (m.Msg)
                {
                    case WM_HOTKEY:
                        switch (m.WParam.ToInt32())
                        {
                            case 100:    //按下的是Ctrl+S
                                //此处填写快捷键响应代码  
                                tsBtnSave_Click(null, null);
                                break;
                            case 101:    //按下的是Ctrl+R
                                //此处填写快捷键响应代码  
                                tsBtnRun_Click(null, null);
                                break;
                            case 102:    //按下的是Ctrl+Left
                                //此处填写快捷键响应代码  
                                Init(currentIndex - 1);
                                break;
                            case 103:    //按下的是Ctrl+Right
                                //此处填写快捷键响应代码  
                                Init(currentIndex + 1);
                                break;
                            case 104:    //按下的是Ctrl+ome
                                //此处填写快捷键响应代码  
                                Init(0);
                                break;
                            case 105:    //按下的是Ctrl+End
                                //此处填写快捷键响应代码  
                                Init(0, false);
                                break;
                            case 106:    //按下的是Ctrl+Delete
                                //此处填写快捷键响应代码  
                                EmptyXml();//删除历史记录
                                break;
                            case 107:    //按下的是Alt+H
                                //此处填写快捷键响应代码  
                                this.Visible=!this.Visible;//显示/隐藏
                                break;
                        }
                        break;
                }
                base.WndProc(ref m);
            }
            #endregion
            #region 4、注销热键
            void UnregistHotKey()
            {
                //注销Id号为100的热键设定
                UnregisterHotKey(Handle, 100);
                //注销Id号为101的热键设定
                UnregisterHotKey(Handle, 101);
                //注销Id号为102的热键设定
                UnregisterHotKey(Handle, 102);
                UnregisterHotKey(Handle, 103);
                UnregisterHotKey(Handle, 104);
                UnregisterHotKey(Handle, 105);
                UnregisterHotKey(Handle, 106);
            }
    
            void PublicUnregistHotKey()
            {
                UnregisterHotKey(Handle, 107);
            }
    
            
            //记得退出程序时需调用,如
            /*
            private void Form1_FormClosing(object sender, FormClosingEventArgs e) //退出程序时缷载热键
            {
                UnregistHotKey();
            }
            */
            #endregion
    
    
            private void MainForm_Activated(object sender, EventArgs e)
            {
                RegistHotKey();
            }
            private void MainForm_Deactivate(object sender, EventArgs e)
            {
                UnregistHotKey();
            }
    
            #endregion
  • 相关阅读:
    Java实现 蓝桥杯VIP 算法训练 校门外的树
    Java实现 蓝桥杯VIP 算法训练 统计单词个数
    Java实现 蓝桥杯VIP 算法训练 统计单词个数
    Java实现 蓝桥杯VIP 算法训练 开心的金明
    Java实现 蓝桥杯VIP 算法训练 开心的金明
    Java实现 蓝桥杯 算法训练 纪念品分组
    Java实现 蓝桥杯 算法训练 纪念品分组
    Java实现 蓝桥杯VIP 算法训练 校门外的树
    Java实现 蓝桥杯VIP 算法训练 统计单词个数
    Java实现 蓝桥杯VIP 算法训练 开心的金明
  • 原文地址:https://www.cnblogs.com/fm168/p/2920296.html
Copyright © 2011-2022 走看看