在c中一次在键盘上按多个键
本文关键字:键盘 一次 | 更新日期: 2023-09-27 18:24:22
我有一个应用程序想要检测键盘上的多个键(c#中的keydown事件)。在最后,我在事件keydown上有有限的密钥检测(可能是4个密钥),而且当"fn"keys keydown时,我不能触发事件。这里有两个问题:1.如何检测尽可能多的钥匙2.如何在键盘按下事件时检测Fn键。
在这里,我使用了我从其他解决方案中找到的globalKeyboardHook库。
private void Form1_Load(object sender, EventArgs e)
{
gkh.HookedKeys.Add(Keys.A);
gkh.HookedKeys.Add(Keys.B);
gkh.HookedKeys.Add(Keys.D);
gkh.HookedKeys.Add(Keys.F);
gkh.HookedKeys.Add(Keys.G);
gkh.HookedKeys.Add(Keys.H);
gkh.HookedKeys.Add(Keys.J);
gkh.HookedKeys.Add(Keys.K);
gkh.HookedKeys.Add(Keys.L);
gkh.HookedKeys.Add(Keys.Z);
gkh.HookedKeys.Add(Keys.X);
gkh.HookedKeys.Add(Keys.C);
gkh.HookedKeys.Add(Keys.V);
gkh.HookedKeys.Add(Keys.B);
gkh.HookedKeys.Add(Keys.N);
gkh.HookedKeys.Add(Keys.M);
gkh.HookedKeys.Add(Keys.Q);
gkh.HookedKeys.Add(Keys.W);
gkh.HookedKeys.Add(Keys.E);
gkh.HookedKeys.Add(Keys.R);
gkh.HookedKeys.Add(Keys.T);
gkh.HookedKeys.Add(Keys.Y);
gkh.HookedKeys.Add(Keys.U);
gkh.HookedKeys.Add(Keys.I);
gkh.HookedKeys.Add(Keys.O);
gkh.HookedKeys.Add(Keys.P);
gkh.HookedKeys.Add(Keys.NumLock);
gkh.HookedKeys.Add(Keys.Insert);
gkh.HookedKeys.Add(Keys.FinalMode);
gkh.KeyDown += new KeyEventHandler(gkh_KeyDown);
}
void gkh_KeyDown(object sender, KeyEventArgs e)
{
Console.WriteLine(e.KeyCode.ToString());
e.Handled = true;
}
如果你能帮我的话,我真的很高兴。谢谢
您无法获得具有多个键的KeyDown
事件。
但是,您可以检查当前按下的键,也可以跟踪当前为Down
的所有键(在获得KeyDown
时记录它们,在获得KeyUp
时删除它们)。
基于硬件键盘,同时按下按键有一个固定的限制。很可能有些组合键只允许您同时注册两个键,而其他组合键则更可用。当然,还有一些游戏键盘可以一次轻松跟踪20个或更多。
有一个托管库MouseKeyHook作为nuget,它支持检测快捷键、组合键和序列。github上的源代码。下面是一个用法示例:
void DoSomething()
{
Console.WriteLine("You pressed UNDO");
}
Hook.AppEvents().OnCombination(new Dictionary<Combination, Action>
{
{Combination.FromString("Control+Z"), DoSomething},
{Combination.FromString("Shift+Alt+Enter"), () => { Console.WriteLine("You Pressed FULL SCREEN"); }}
});
有关更多信息,请参阅:检测密钥组合和序列