zoukankan      html  css  js  c++  java
  • 【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隐藏  
  • 相关阅读:
    iOS10---新特性以及适配点
    linux下,MySQL默认的数据文档存储目录为/var/lib/mysql。
    Linux安装JDK完整步骤
    ajax获取json数据为undefined--原因解析
    怎样用jQuery拿到select中被选中的option的值
    一个Filter需要配置多个url-pattern
    Jquery+Ajax实现Select动态添加数据
    tomcat启动报错:Address already in use: JVM_Bind
    Gson 是google解析Json的一个开源框架,同类的框架fastJson,JackJson
    Java中文乱码解决方案
  • 原文地址:https://www.cnblogs.com/jhli/p/7017051.html
Copyright © 2011-2022 走看看