按 Windows 修饰键时 Keyboard.Modifiers 是 None

Keyboard.Modifiers is None when pressing the Windows modifier key

只要单击或双击背面的按钮,Surface Pen 就会发送信号 WindowsKey+F20/19,我想在我的应用程序中捕获它。

我看过 some questions 关于检测 Windows 键何时被按下的信息,似乎在没有 PInvoke 的情况下这在 C# 中是不可能的。

但是,我不确定这是否也适用于作为修饰符的 Windows 键。好像是这样,但我想确定一下。

ModifierKeys enum 文档列出了 Windows 密钥,似乎没有关于此密钥的特殊说明。

所以我已经将主要 window 的 OnPreviewKeyDown 连接到此代码:

private void MainWindow_OnPreviewKeyDown(object sender, KeyEventArgs e)
{
    if (e.SystemKey == Key.F10 &&
         e.KeyboardDevice.Modifiers.HasFlag(System.Windows.Input.ModifierKeys.Windows)
      {
        Console.WriteLine("Succes!");
    }
}

如果我听 alt 修改键,此代码有效,但是如果我按 Windows+F10 e.KeyboardDevice.Modifiers 等于 None,因此 if 条件失败。

有什么我遗漏的吗?或者我应该走 PInvoke 路线吗?

下面的代码应该可以检测到Windows+F10:

private void MainWindow_PreviewKeyDown(object sender, KeyEventArgs e)
{
    if (e.SystemKey == Key.F10 && (Keyboard.IsKeyDown(Key.LWin) || Keyboard.IsKeyDown(Key.RWin)))
    {
        Console.WriteLine("Succes!");
    }
}