首页 新闻 会员 周边

Winform 窗体快捷键设置 (非全局,仅针对当前项目)

0
悬赏园豆:10 [待解决问题]

话不多说 看代码

这是现有的,但是快捷键生成后是全局的

 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();
            }
        }    

有没有办法弄成仅针对当前窗体的快捷键(当窗体打开时触发)

JO的美好时光的主页 JO的美好时光 | 初学一级 | 园豆:14
提问于:2016-11-16 09:36
< >
分享
所有回答(3)
0
hahanonym | 园豆:1460 (小虾三级) | 2016-11-16 09:44

我看过这个,基本代码和我的一样,都是全局的快捷键。

支持(0) 反对(0) JO的美好时光 | 园豆:14 (初学一级) | 2016-11-16 11:55
0
CodeHsu | 园豆:5468 (大侠五级) | 2016-11-16 11:04

老哥你确定?

支持(0) 反对(0) JO的美好时光 | 园豆:14 (初学一级) | 2016-11-16 11:56
0

办法较多,说一二;

1 直接抓本窗口消息或者事件(前提建立在焦点上);

2 获取系统虚拟键盘,记得好像是个256 byte数组,每个byte标示键盘状态(按下、弹起),这个不像钩子会被后续的挂掉。

方法2获取键盘状态的办法也有很多,比如dx,xnaFramework。

花飘水流兮 | 园豆:13560 (专家六级) | 2016-11-18 17:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册