Wygląda na to, że chcesz sprawdzić stan wszystkich klawiszy na klawiaturze. Najlepsza funkcja to Win32 Api zadzwoń GetKeyboardState
nie wierzę, nie jest dobrym udało równowartość tej funkcji. Kod PInvoke dla niego jest dość prosta
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetKeyboardState(byte [] lpKeyState);
var array = new byte[256];
GetKeyboardState(array);
To zapełnić byte[]
z góra/dół stanu każdego klucza wirtualnego w systemie. Jeśli ustawiony jest bit wysoki, to klawisz wirtualny jest aktualnie wciśnięty. Odwzorowanie kodu Key
na kod klucza wirtualnego odbywa się przez uwzględnienie tylko wartości liczbowej wartości numerycznej.
public static byte GetVirtualKeyCode(Key key) {
int value = (int)key;
return (byte)(value & 0xFF);
}
Powyższe prace dla większości wartości Key
ale trzeba być ostrożnym z klawiszy modyfikujących. Wartości i nie będą tutaj działać, ponieważ są to modyfikatory techniczne, a nie wartości kluczowe. Aby użyć modyfikatorów trzeba użyć faktyczne związane wartości klucza Keys.ControlKey
, Keys.LShiftKey
, itp ... (naprawdę coś, co kończy się klucz)
więc sprawdzenie, czy dany klucz jest ustawiony może być wykonane w następujący sposób
var code = GetVirtualKeyCode(Key.A);
if ((array[code] & 0x80) != 0) {
// It's pressed
} else {
// It's not pressed
}
Czy chcesz, aby wszystkie klawisze były naciskane podczas uruchamiania określonego fragmentu kodu, czy chcesz wydarzenie, które dzieje się po naciśnięciu klawisza? – zimdanen
możliwy duplikat [najlepszy sposób implementacji skrótów klawiszowych w winformach?] (Http://stackoverflow.com/questions/400113/best-way-to-implement-keyboard-shortcuts-in-winforms) –
Powiedz, że chcę mieć narzędzie do obsługi zdarzeń dla MouseWheel, ale chcę nacisnąć klawisz "Ctrl", gdy wykonuję coś w EventHandler. więc jeśli przewińę koło, otrzymam tylko wyniki koła myszy, a nie naciśnięcie klawisza. – Deukalion