C#MouseKeyHook:某些键+修饰符组合不起作用

时间:2018-11-21 21:15:36

标签: c# keyboard-events mousekeyhook

我一直在使用MouseKeyHook NuGet包,它对于捕获大多数输入非常有用。但是在捕获键和修饰符的某些组合时遇到了一些问题。

DataFrame


让我们尝试敲一些键,看看输出是什么:

public static class InputHandler
{
    private static IKeyboardMouseEvents _GlobalHook;
    public static IKeyboardMouseEvents GlobalHook => _GlobalHook;

    public static void Subscribe()
    {
        _GlobalHook = Hook.AppEvents();
        _GlobalHook.KeyDown += KeyDown;
    }

    private static void KeyDown(object sender, KeyEventArgs e)
    {
        Console.WriteLine("Output: " + e.Modifiers + " + " + e.KeyCode);
    }
}

太棒了!正是您所期望的。现在,键盘顶部的数字栏又如何呢?

Key: A
> Output: None + A

Key: Shift & A
> Output: Shift + A

Key: Shift & Control & Alt & A
> Output: Shift, Control, Alt + A

再次,完全符合您的期望。没问题... 那0键呢?

Key: 1
> Output: None + D1

Key: Shift & Control & Alt & 3
> Output: Shift, Control, Alt + D3


那么这是怎么回事?为什么当完全按下 D0 + Ctrl + Shift时事件无法正确触发?另外值得注意的是,这是一个KeyDown事件,因此只要按住键,输出就会重复,但是当打印“ ShiftKey”输出时,它就不会重复,这很奇怪。

最坏的情况是,我总是可以切换绑定,但是我注意到许多不同的键+修饰符组合(主要是oem键,数字键盘和数字键)的奇怪之处,所以很高兴知道为什么这发生了。

1 个答案:

答案 0 :(得分:0)

我可以想到两种可能性:

它可能是操作系统的键盘快捷键。

https://support.microsoft.com/en-au/help/967893/input-method-editor-keyboard-shortcut-ctrl-shift-0-switches-the-input

许多键盘实际上不能正确检测每种可能的按键组合。具体细节因键盘电路板的布局而异。 Shift-A或Ctrl-X始终有效,同时按住每个键一次只能在最高级的键盘上起作用,在灰色区域之间。

https://en.wikipedia.org/wiki/Rollover_(key)#Key_jamming_and_ghosting