Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.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# WPF键预览窗口键和第二个键_C#_Wpf_Onkeydown - Fatal编程技术网

C# WPF键预览窗口键和第二个键

C# WPF键预览窗口键和第二个键,c#,wpf,onkeydown,C#,Wpf,Onkeydown,我正在为Windows7在C#4.5中实现一个WPF应用程序,我希望能够在用户按下Windows键和C时捕获事件 我已经实现了OnPreviewKeyDownEvent,它会按预期触发(在我的代码中,我有一些其他事件会触发其他按键),但是似乎只有Windows按键触发,而不是第二次按键。我可以从debug.Writeline命令中看到这一点 你知道如何捕获windows键和C吗 private void OnPreviewKeyDownEvent(object sender, KeyEventA

我正在为Windows7在C#4.5中实现一个WPF应用程序,我希望能够在用户按下Windows键和C时捕获事件

我已经实现了OnPreviewKeyDownEvent,它会按预期触发(在我的代码中,我有一些其他事件会触发其他按键),但是似乎只有Windows按键触发,而不是第二次按键。我可以从debug.Writeline命令中看到这一点

你知道如何捕获windows键和C吗

private void OnPreviewKeyDownEvent(object sender, KeyEventArgs e)
{
    if ((e.Key == Key.C && (Keyboard.Modifiers & ModifierKeys.Windows) == ModifierKeys.Windows) && e.IsDown)
       Messagbox.Show("Pressed1");

    if (e.Key == Key.C && (Keyboard.IsKeyDown(Key.LWin) || Keyboard.IsKeyDown(Key.RWin)))
            Messenger.Default.Send(new RightClickMessage())
         Messagbox.Show("Pressed2");


        System.Diagnostics.Debug.WriteLine(e.Key + " " + Keyboard.IsKeyDown(Key.LWin) + " ");
}

非常感谢您的帮助。

以下是检测Win+C的方法


我认为您需要使用windows api并制作一个钩子来拦截windows密钥
    private void OnPreviewKeyDownEvent(object sender, KeyEventArgs e)
    {
        if ((Keyboard.IsKeyDown(Key.LWin) || Keyboard.IsKeyDown(Key.RWin)) && Keyboard.IsKeyDown(Key.C))
        {
            // Win + C 
        }
    }
    private void OnPreviewKeyDownEvent(object sender, KeyEventArgs e)
    {
        if (((Keyboard.GetKeyStates(Key.LWin) & KeyStates.Down) == KeyStates.Down ||
            (Keyboard.GetKeyStates(Key.RWin) & KeyStates.Down) == KeyStates.Down) &&
            (Keyboard.GetKeyStates(Key.C) & KeyStates.Down) == KeyStates.Down)
        {
            // Win + C 
        }
    }