话不多说 看代码
这是现有的,但是快捷键生成后是全局的
protected override void WndProc(ref Message m)// 监视Windows消息 { switch (m.Msg) { case HotKey.WM_HOTKEY: ProcessHotkey(m);//按下热键时调用ProcessHotkey()函数 break; } try { base.WndProc(ref m); //将系统消息传递自父类的WndProc } catch (Exception ex) { } } int CtrlK, WinK, CtrlShiftP; /// <summary> /// 设置热键 /// </summary> private void SetHotKeyLoad() { CtrlK = HotKey.GlobalAddAtom("Ctrl-K"); HotKey.RegisterHotKey(this.Handle, CtrlK, HotKey.KeyModifiers.Ctrl, (int)Keys.K); } private void ProcessHotkey(Message m) //按下设定的键时调用该函数 { IntPtr id = m.WParam;//IntPtr用于表示指针或句柄的平台特定类型 int sid = id.ToInt32(); if (sid == CtrlK) { //显示试图到最前段 打开主面板ToolStripMenuItem.PerformClick(); } }
有没有办法弄成仅针对当前窗体的快捷键(当窗体打开时触发)
办法较多,说一二;
1 直接抓本窗口消息或者事件(前提建立在焦点上);
2 获取系统虚拟键盘,记得好像是个256 byte数组,每个byte标示键盘状态(按下、弹起),这个不像钩子会被后续的挂掉。
方法2获取键盘状态的办法也有很多,比如dx,xnaFramework。