2015-09-25 37 views
9

我想檢測Windows應用程序中的組合鍵(例如Control-A)。 KeyDown事件處理程序包含有關按下的最後一個鍵的信息。但是我怎樣才能知道Control鍵是否被按下?在通用Windows應用程序中獲取鍵盤狀態

+0

正常情況下,你會'KeyPressed == Control | A' – kevintjuh93

+0

@KevinKal謝謝。但我試過了。它只是'A'。 – ispiro

+0

控制是一個系統鍵,因此它的記錄方式不同。我不確定它是如何完成的,但這是你看到的問題 – rmn36

回答

17

您可以使用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 
    } 
}; 
+1

如果我正確理解你的問題,而不是訂閱你的頁面的'KeyDown'事件,訂閱'Window.Current.CoreWindow.KeyDown'就像我的答案。 –

+1

完美!非常感謝! – ispiro

6

您可以使用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; 
      } 
     } 
    } 
} 
相關問題