我有一个简单的应用程序,可以通过任何字母的热键执行任何代码,我的意思是:
C, Q, Ctrl-C, Alt-Q, Ctrl-Alt-Q
每当我按下这个热键时,它就会触发,并且处于任何形式的状态(甚至最小化托盘)。但如果我需要为SHIFT或CONTROL(ctrl)-nope这样的单个键注册热键,这是行不通的。这是代码:
//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);
}
我真的需要为单频键和单ctrl键注册全局热键,但似乎我不能这样做。我该怎么做?我相信ProcessCmdKey
只有在表单聚焦时才起作用,所以它对我不起作用,但它会捕获ctrl
、shift
或space
键。
只能将修饰符键与另一个键结合使用。不能单独使用修改器键。这在我遇到的每一种语言中都是一样的。修改键修改一个或多个其他键的操作。
即使有可能,这也是不可取的,因为如果它单独使用,那么你将无法将该修饰键与任何其他组合键一起使用,因为它一被按下就会被第一个动作吞噬。