Get Keyboard state in Universal Windows Apps

后端 未结 2 1947
轮回少年
轮回少年 2021-01-02 00:51

I want to detect a key combination (e.g. Control-A) in a Windows App. The KeyDown event handler has information about the last key pressed. But how

相关标签:
2条回答
  • 2021-01-02 01:28

    You can use AcceleratorKeyActivated event, irrespective of where the focus is it will always capture the event.

    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;
                }
            }
        }
    }
    
    0 讨论(0)
  • 2021-01-02 01:48

    You can use CoreVirtualKeyStates.HasFlag(CoreVirtualKeyStates.Down) to determine is the Ctrl key has been pressed, like this -

    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
        }
    };
    
    0 讨论(0)
提交回复
热议问题