C# 在c语言中,多个键同时按下键盘#
我有一个应用程序想要检测键盘上的多个键(c#中的keydown事件)。 最后,我在事件keydown上有有限的键检测(可能是4个键),并且当“fn”键keydown时,我不能触发事件。 这里有两个问题: 1.如何尽可能多地检测密钥 2.如何在键盘按下事件时检测Fn键 在这里,我介绍了我从其他解决方案中找到的globalKeyboardHook库C# 在c语言中,多个键同时按下键盘#,c#,C#,我有一个应用程序想要检测键盘上的多个键(c#中的keydown事件)。 最后,我在事件keydown上有有限的键检测(可能是4个键),并且当“fn”键keydown时,我不能触发事件。 这里有两个问题: 1.如何尽可能多地检测密钥 2.如何在键盘按下事件时检测Fn键 在这里,我介绍了我从其他解决方案中找到的globalKeyboardHook库 private void Form1_Load(object sender, EventArgs e) { gkh.Ho
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
事件
但是,您可以检查当前按下的键,也可以跟踪当前所有按下的键(在获得KeyDown
时记录,在获得keydup
时删除)
基于硬件键盘,同时按下按键有一个固定的限制。很可能有些组合键只允许同时注册两个键,而其他组合键则更有用。当然,还有一些游戏键盘可以轻松地一次跟踪20个或更多的键盘。有一个托管库,支持检测快捷方式、按键组合和序列。下面是一个使用示例:
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"); }}
});
void DoSomething()
{
Console.WriteLine(“您按下了撤消”);
}
Hook.AppEvents().onComposition(新字典
{
{composition.FromString(“Control+Z”),DoSomething},
{composition.FromString(“Shift+Alt+Enter”),()=>{Console.WriteLine(“您按下了全屏”);}
});
有关更多信息,请参阅:它是键盘体系结构的一部分,除了ctrl和AltYea等键外,您无法读取多个键。感谢pnutsHow关于在c#?@Wintronic中键盘按下事件时检测Fn键的内容我认为根本没有发送Fn
键(我原以为您指的是F1-12)-如果我没有弄错的话,只会发送Fn
和具有替代含义的特定组合Fn
不是Windows知道的键(键盘会为每个组合发送特殊命令,如键。MediaNextTrack
)。与Ctrl
或Alt
不同,它不是一个可以与任何其他键一起使用的修改键。