2012-08-22 17 views

Odpowiedz

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

można wtedy zrobić:

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

Powtórz wartości wyliczeniowe 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

Dobra odpowiedź tutaj ... dostać zbiór wszystkich keystates naraz używając GetKeyboardState():

Powyższe jest sprawdzenie stanu żywo klawiatury.

Jeśli polegasz na zahaczaniu zdarzeń do wydarzeń KeyDown/KeyUp w celu śledzenia stanu klawiatury ... może to nie być tak dokładne.

To dlatego, że polegasz na pompowaniu komunikatów w celu przetworzenia i wysłania wiadomości KeyDown/KeyUp .... mogą one zostać dostarczone po ponownym zmianie stanu klawiatury.

Również dlatego, że gdy twój kawałek kodu, który jest zainteresowany stanem klawiatury jest uruchomiony (zwykle w wątku UI) ... KeyDown lub KeyUp nie mogą ci przerwać ... ponieważ są wysyłane w wątku UI też .... dlatego należy użyć opcji GetKeyBoardState() lub Keyboard.IsKeyDown.

(powyższa nabiera chcesz i dbać o stan żywo)

+0

Dobra odpowiedź –

4

Jeśli chcesz klucz wykryć naciśnięciu tylko w naszej aplikacji (gdy Twoje okno WPF jest aktywna) dodać KeyDown jak poniżej:

public MainWindow() 
{ 
    InitializeComponent(); 
    this.KeyDown += new KeyEventHandler(MainWindow_KeyDown); 
} 

void MainWindow_KeyDown(object sender, KeyEventArgs e) 
{ 
    MessageBox.Show("You pressed a keyboard key."); 
} 

Jeśli chcesz odłączyć Kiedy klawisz jest wciśnięty, nawet jeśli twoje okno WPF nie jest aktywne, jest nieco trudniejsze, ale bardziej posobne. Polecam RegisterHotKey (definiuje systemowy klawisz skrótu) i UnregisterHotKey z Windows API. Spróbuj użyć je w C# od pinvoke.net lub tych tutoriali:

thse jest próbka w Microsoft Forums.

Będziesz używać Virtual-Key Codes. Mam nadzieję, że wszystko było jasne i zrozumiesz moją odpowiedź.

Powiązane problemy