registerhotkey不会触发shift或control键,但适用于字母键

时间:2013-11-25 16:55:32

标签: c# registerhotkey

我有一个简单的应用程序可以通过任何热键任意字母执行任何代码,我的意思是:

C, Q, Ctrl-C, Alt-Q, Ctrl-Alt-Q

每当我按下它并处于任何形式状态(甚至最小化托盘)时,此热键都会触发。 但是如果我需要为SHIFT或CONTROL(ctrl)等单键注册热键 - 不行,则不起作用。 这是代码:

 //at form load
 RegisterHotKey(this.Handle, 0, 0, (int)Keys.Shift); // doesnt works
 RegisterHotKey(this.Handle, 1, 0, (int)Keys.C); //works

 protected override void WndProc(ref Message m)
        {
            if (m.Msg == 0x0312)
            {
                int id = m.WParam.ToInt32();
                if (id < 2) //testing these two hotkeys
                {
                    MessageBox.Show("trigger");
                }
            }
            base.WndProc(ref m);
        }

我真的需要为单班和单键控制键注册全局热键,但似乎我不能这样做。我怎样才能做到这一点?我相信ProcessCmdKey只有在关注表单时才有效,所以它对我不起作用,但它会捕获ctrlshiftspace个键。

1 个答案:

答案 0 :(得分:2)

您只能将修饰键与其他键结合使用。您不能单独使用修改键。我遇到的每种语言都是一样的。修饰符键修改 一个或多个其他键的操作

即使它是可能的,也是不可取的,因为如果它是单独使用的,那么你将无法将该修饰键与任何其他键组合一起使用,因为它会被第一个动作很快吞噬掉因为它被按下了。