重写DefWndProc事件
#region Window 消息捕获 const int WM_COPYDATA = 0x004A; public structCOPYDATASTRUCT { publicIntPtr dwData; public intcbData; [MarshalAs(UnmanagedType.LPStr)] public stringlpData; } [DllImport("user32")] public static extern bool ChangeWindowMessageFilter(uint msg, intflags); protected override void DefWndProc(refSystem.Windows.Forms.Message m) { switch(m.Msg) { caseWM_COPYDATA: COPYDATASTRUCT mystr = newCOPYDATASTRUCT(); Type mytype =mystr.GetType(); mystr =(COPYDATASTRUCT)m.GetLParam(mytype); Trace(mystr.lpData); processCommand(mystr.lpData); break; default: base.DefWndProc(refm); 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, uintcontrol, Keys vk); //解除注册热键的api [DllImport("user32")] public static extern bool UnregisterHotKey(IntPtr hWnd, intid); private frmHotkeyTest testFrm = null; private void ShowTestFrm(string_text) { testFrm = newfrmHotkeyTest(); this.WindowState =FormWindowState.Maximized; this.TopMost = true; this.Show(); this.TopMost = false; testFrm.Text =_text; testFrm.ShowDialog(); } protected override void WndProc(refMessage m) { switch(m.Msg) { case 0x0312: //这个是window消息定义的注册的热键消息 if (m.WParam.ToString() == "123") //按下CTRL+Q隐藏 { testFrm = newfrmHotkeyTest(); 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(refm); }
在回调WndProc方法中,根据消息编码判断各种快捷键回调处理即可
例如:
if (m.WParam.ToString() == "123") //按下CTRL+Q隐藏