c#中键盘上的多个键一次完成

时间:2014-09-24 07:19:24

标签: c#

我有一个想要检测键盘上的多个键的应用程序(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;
    }

如果你能帮助我,我真的很高兴。 感谢。

2 个答案:

答案 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