2015-09-25 9 views
9

Windowsアプリケーションでキーの組み合わせ(たとえばControl-A)を検出します。 KeyDownイベントハンドラには、最後に押されたキーに関する情報があります。しかし、コントロールキーが押されているかどうかをどうやって調べることができますか?あなたが決定するためにCoreVirtualKeyStates.HasFlag(CoreVirtualKeyStates.Down)を使用することができますユニバーサルWindowsアプリケーションでキーボード状態を取得する

+0

通常、あなたは 'KeyPressed == Control | A ' – kevintjuh93

+0

@KevinKalありがとう。しかし、私はそれを試みました。それは「A」だけだった。 – ispiro

+0

コントロールはシステムキーなので、別の方法でログに記録されます。どうしたのか分かりませんが、それはあなたが見ている問題です – rmn36

答えて

17

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; 
      } 
     } 
    } 
} 
関連する問題