2012-08-22 42 views
5

キーボードのキーが現在押されているかどうかを検出するにはどうすればよいですか?私はキーが何であるかには関心がありません。キーが押されているかどうかを知りたいだけです。どのキーが押されたかを検出する方法

if (Keyboard.IsKeyDown(Key.ANYKEY??) 
{ 

} 

答えて

7
public static IEnumerable<Key> KeysDown() 
{ 
    foreach (Key key in Enum.GetValues(typeof(Key))) 
    { 
     if (Keyboard.IsKeyDown(key)) 
      yield return key; 
    } 
} 

if(KeysDown().Any()) //... 
2

System.Windows.Input.Key列挙値を繰り返します。

public static bool IsAnyKeyDown() 
    { 
     var values = Enum.GetValues(typeof(Key)); 

     foreach (var v in values) 
     { 
      if (((Key)v) != Key.None) 
      { 
       if (Keyboard.IsKeyDown((Key)v)) 
       { 
        return true; 
       } 
      } 
     } 

     return false; 
    } 
1

ここで良い答えは... GetKeyboardState()を使用して一度にすべてのkeystatesのセットを取得:

上記は、キーボードの生の状態をチェックしています。

キーボードの状態を追跡するためにKeyDown/KeyUpイベントまでフックするイベントに頼るなら、これはあまり正確ではないかもしれません。

これらのKeyDown/KeyUpメッセージを処理して送信するために、メッセージを送信することに頼っているからです。実際のキーボード状態が再び変更された後に配信される可能性があります。

また、キーボード状態に興味のあるコードのビットが実行されている(通常はUIスレッド)ため、KeyDownまたはKeyUpはあなたに割り込むことができません... UIスレッドでディスパッチされるためつまり、GetKeyBoardState()またはKeyboard.IsKeyDownを使用する必要があります。

(上記したいとライブの状態を気に想定している)あなたは何ができる

+0

本当に良い答え –

4

あなたが唯一の私たちのアプリケーションに押されたキー(ときを検出したい場合あなたのWPFウィンドウがアクティブになっています)

あなたのWPFウィンドウがアクティブでなくてもキーが押された時には少し難しくなります。 RegisterHotKey(システム全体のホットキーを定義する)とWindows APIからUnregisterHotKeyをお勧めします。 pinvoke.netまたはこれらのチュートリアルからC#でこれらを使用してみてください:

ThseはMicrosoft Forumsのサンプルです。

Virtual-Key Codesを使用します。 私は私が明確で、あなたが私の答えを理解することを望むと思います。

関連する問題