2

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

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

我真的需要为单次 shift 和单 ctrl 键注册全局热键,但似乎我不能这样做。我怎样才能做到这一点?我相信ProcessCmdKey只有在形式集中时才有效,所以它对我不起作用,但它会捕获ctrlor shiftorspace键。

4

1 回答 1

2

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

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

于 2013-11-25T17:14:31.203 回答