Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在c语言中,多个键同时按下键盘#_C# - Fatal编程技术网

C# 在c语言中,多个键同时按下键盘#

C# 在c语言中,多个键同时按下键盘#,c#,C#,我有一个应用程序想要检测键盘上的多个键(c#中的keydown事件)。 最后,我在事件keydown上有有限的键检测(可能是4个键),并且当“fn”键keydown时,我不能触发事件。 这里有两个问题: 1.如何尽可能多地检测密钥 2.如何在键盘按下事件时检测Fn键 在这里,我介绍了我从其他解决方案中找到的globalKeyboardHook库 private void Form1_Load(object sender, EventArgs e) { gkh.Ho

我有一个应用程序想要检测键盘上的多个键(c#中的keydown事件)。 最后,我在事件keydown上有有限的键检测(可能是4个键),并且当“fn”键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
事件

但是,您可以检查当前按下的键,也可以跟踪当前所有
按下的键(在获得
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
不同,它不是一个可以与任何其他键一起使用的修改键。