• 【WinForm程序】注册热键快捷键切换


    重写DefWndProc事件

    #region Window 消息捕获
            const int WM_COPYDATA = 0x004A;
            public struct COPYDATASTRUCT
            {
                public IntPtr dwData;
                public int cbData;
                [MarshalAs(UnmanagedType.LPStr)]
                public string lpData;
            }
    
    
            [DllImport("user32")]
            public static extern bool ChangeWindowMessageFilter(uint msg, int flags);  
    
            protected override void DefWndProc(ref System.Windows.Forms.Message m)
            {
                switch (m.Msg)
                {
                    case WM_COPYDATA:
                        COPYDATASTRUCT mystr = new COPYDATASTRUCT();
                        Type mytype = mystr.GetType();
                        mystr = (COPYDATASTRUCT)m.GetLParam(mytype);
                        Trace(mystr.lpData);
                        processCommand(mystr.lpData);
                        break;
                    default:
                        base.DefWndProc(ref m);
                        break;
                }
                //System.Diagnostics.Debug.WriteLine(DateTime.Now.ToString() + "  " + m.Msg.ToString());
            }
    
    
            #endregion Window 消息捕获

    重写WndProc事件

            //注册热键的api
            [DllImport("user32")]
            public static extern bool RegisterHotKey(IntPtr hWnd, int id, uint control, Keys vk);
    
            //解除注册热键的api
            [DllImport("user32")]
            public static extern bool UnregisterHotKey(IntPtr hWnd, int id);
    
            private frmHotkeyTest testFrm = null;
    
            private void ShowTestFrm(string _text)
            {
                testFrm = new frmHotkeyTest();
                this.WindowState = FormWindowState.Maximized;
                this.TopMost = true;
                this.Show();
                this.TopMost = false;
                testFrm.Text = _text;
                testFrm.ShowDialog();
            }
    
            protected override void WndProc(ref Message m)
            {
                switch (m.Msg)
                {
                    case 0x0312:  //这个是window消息定义的注册的热键消息  
                        if (m.WParam.ToString() == "123")   // 按下CTRL+Q隐藏  
                        {
                            testFrm = new frmHotkeyTest();
                            testFrm.ShowDialog();
                        }
                        else if (m.WParam.ToString() == "456") // 按下CTRL+W显示
                        {
                            testFrm.Close();
                        }
                        else if (m.WParam.ToString() == "103")
                        {
                            ShowTestFrm("F5");
                        }
                        else if (m.WParam.ToString() == "102")
                        {
                            ShowTestFrm("Ctrl+Alt+D");
                        }
                        else if (m.WParam.ToString() == "101")
                        {
                            ShowTestFrm("Ctrl+B");
                        }
                        else if (m.WParam.ToString() == "100")
                        {
                            ShowTestFrm("Shift+S");
                        }
                        break;
                }
                base.WndProc(ref m);
            }

    在回调WndProc方法中,根据消息编码判断各种快捷键回调处理即可

    例如:

    if (m.WParam.ToString() == "123")   // 按下CTRL+Q隐藏  
  • 相关阅读:
    docker部署mysql
    docker安装nginx
    Linux查看日志-grep
    linux系统常用命令
    python爬虫
    unittest中常用的assert语句
    Linux 监控tcp连接数及状态
    linux top命令查看内存及多核CPU的使用讲述
    jmeter的时间戳函数使用
    influxdb基本SQL操作2
  • 原文地址:https://www.cnblogs.com/jhli/p/7017051.html
Copyright © 2020-2023  润新知