在通用 Windows 应用程序中获取键盘状态

Posted

技术标签:

【中文标题】在通用 Windows 应用程序中获取键盘状态【英文标题】:Get Keyboard state in Universal Windows Apps 【发布时间】:2015-12-23 06:25:14 【问题描述】:

我想检测 Windows 应用程序中的组合键(例如 Control-A)。 KeyDown 事件处理程序包含有关最后按下的键的信息。但是如何确定是否也按下了 Control 键?

【问题讨论】:

通常你会这样做KeyPressed == Control | A @KevinKal 谢谢。但我试过了。只是A Control 是一个系统密钥,因此它的记录方式不同。我不确定它是如何完成的,但这就是您看到的问题 @rmn36 是的。在 WPF 中,我们可以为此使用 Keyboard 类。不幸的是,在 UWP 中无法访问。 Windows 挂钩?很抱歉我从未在 UWP 工作过 【参考方案1】:

你可以用CoreVirtualKeyStates.HasFlag(CoreVirtualKeyStates.Down)来判断是不是Ctrl键被按下了,像这样-

Window.Current.CoreWindow.KeyDown += (s, e) =>

    var ctrl = Window.Current.CoreWindow.GetKeyState(VirtualKey.Control);
    if (ctrl.HasFlag(CoreVirtualKeyStates.Down) && e.VirtualKey == VirtualKey.A)
    
        // do your stuff
    
;

【讨论】:

如果我正确理解您的问题,不要订阅您页面的KeyDown 事件,而是订阅Window.Current.CoreWindow.KeyDown,就像我的回答一样。 完美!非常感谢!【参考方案2】:

您可以使用 AcceleratorKeyActivated 事件,无论焦点在哪里,它都会始终捕获该事件。

public MyPage()

    Window.Current.CoreWindow.Dispatcher.AcceleratorKeyActivated += AcceleratorKeyActivated;



private void AcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs args)

    if (args.EventType.ToString().Contains("Down"))
    
        var ctrl = Window.Current.CoreWindow.GetKeyState(VirtualKey.Control);
        if (ctrl.HasFlag(CoreVirtualKeyStates.Down))
        
            switch (args.VirtualKey)
            
                case VirtualKey.A:
                    Debug.WriteLine(args.VirtualKey);
                    Play_click(sender, new RoutedEventArgs());
                    break;
            
        
    

【讨论】:

以上是关于在通用 Windows 应用程序中获取键盘状态的主要内容,如果未能解决你的问题,请参考以下文章

在焦点事件 TextBox 上打开触摸键盘 windows 10 |通用应用

在Windows 10 C#UWP通用Windows应用程序中获取UserName

如何获取和设置通用 Windows 应用程序的音量级别

如何在 Web 应用程序上获取键盘高度

用于获取通知的通用 Windows 10 应用后台任务计时器

检测 Windows 10 系统电源状态