C# Keydown事件如何使用热键收听
我已将ctrl+`注册为热键,我想在按下热键时显示一个窗口,而不是释放leftctrl键和toggle`键来执行其他操作,就像alt+tab切换应用程序一样。下面是代码C# Keydown事件如何使用热键收听,c#,wpf,C#,Wpf,我已将ctrl+`注册为热键,我想在按下热键时显示一个窗口,而不是释放leftctrl键和toggle`键来执行其他操作,就像alt+tab切换应用程序一样。下面是代码 private void ListOnKeyDown(object sender, KeyEventArgs e) { if (e.SystemKey==Key.LeftCtrl && e.Key == Key.Oem3) { m_host.SelectNext(); }
private void ListOnKeyDown(object sender, KeyEventArgs e)
{
if (e.SystemKey==Key.LeftCtrl && e.Key == Key.Oem3)
{
m_host.SelectNext();
}
}
但我发现这种方式只触发了一个键。那么,触发键事件的正确方式是什么呢
下面是调试信息。
只需更改keydown事件即可通过这种方式检测修改器
private void ListOnKeyDown(object sender, KeyEventArgs e)
{
if (Keyboard.Modifiers == ModifierKeys.Control && e.Key == Key.Oem3)
{
m_host.SelectNext();
e.Handled = true;
}
}
因为onKeyDown事件只适用于一个键,为了同时使用两个键,您几乎不需要临时修改:
bool firstkeyisOn = false;
private void ListOnKeyDown(object sender, KeyEventArgs e)
{
if (e.SystemKey==Key.LeftCtrl/*Or other key by choice*/)
{
firstkeyisOn = true;
e.Handled = true;
return;
}
if(firstkeyisOn && (e.Key == Key.Oem3/*Or other key by choice*/))
{
m_host.SelectNext();
}
}
private void ListOnKeyUp(object sender, KeyEventArgs e)
{
if (e.SystemKey==Key.LeftCtrl/*Key must be same as holding one*/)
{
firstkeyisOn = false;
}
//or
//firstkeyisOn = false;
}
要取消热键模式,只需在OnKeyUp事件下添加firstkeyisOn=false,您就可以开始了。当您说“热键”时,您的意思是当您当前在windows中未处于活动状态时,它也应该被触发,例如“全局热键”?是,热键是一个全局热键。它显示并激活一个窗口。您可以看到e.SystemKey为None。但我怀疑检查SystemKey None是否会触发事件,因为未单击任何键?一个键未释放,但键状态应为keydown?查找我的更新代码,刚在测试应用程序上检查过,效果很好。这是一项糟糕的技术。Ctrl是一个修改键。也许它可以工作,但我想知道如何使用按键事件。键盘。修改器也没有。你确定是因为在调试时,我将修改器作为控件使用吗?是的,因为热键触发后ctrl键总是按下,我想这与此有关。如果同时按下这两个键,怎么可能