按 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!");
}
}
只要单击或双击背面的按钮,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!");
}
}