我有一个想要检测键盘上的多个键的应用程序(c#中的keydown事件)。 在最后,我在事件keydown上有有限的键检测(可能是4个键),并且当“fn”键keydown时我也无法触发事件。 这里有2个问题: 1.如何尽可能多地检测密钥 2.键盘keydown事件时如何检测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;
}
如果你能帮助我,我真的很高兴。 感谢。
答案 0 :(得分:1)
您无法获得包含多个密钥的KeyDown
个事件。
但是,您可以检查当前按下的键,也可以跟踪当前Down
的所有键(当您获得KeyDown
时记录它们,并在获得时删除) KeyUp
)。
根据硬件键盘同时按下按键有一个固定的限制。很可能一些键组合只允许您同时注册两个键,而其他组合更有用。当然,游戏键盘可以轻松跟踪一次20个或更多。
答案 1 :(得分:0)
托管库MouseKeyHook as nuget支持检测快捷方式,组合键和序列。 Source code on 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"); }}
});
有关详细信息,请参阅:Detecting Key Combinations and Seuqnces