Sembra che si voglia interrogare lo stato di tutti i tasti della tastiera. La funzione migliore di ciò è l'API Win32 chiamata GetKeyboardState
Io non credo che ci sia un buon equivalente gestito di quella funzione. Il codice PInvoke perché è abbastanza semplice
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetKeyboardState(byte [] lpKeyState);
var array = new byte[256];
GetKeyboardState(array);
Questo popolerà la byte[]
con l'alto/basso stato di ogni tasto virtuale nel sistema. Se il bit più alto è impostato, al momento viene premuto il tasto virtuale. La mappatura di un Key
a un codice di chiave virtuale viene eseguita considerando solo la parte byte
del valore numerico Key
.
public static byte GetVirtualKeyCode(Key key) {
int value = (int)key;
return (byte)(value & 0xFF);
}
I lavori di cui sopra per la maggior parte dei valori Key
ma è necessario stare attenti con tasti modificatori. I valori Keys.Alt
, Keys.Control
e Keys.Shift
non funzioneranno qui perché sono tecnicamente modificatori e non valori chiave. Per utilizzare modificatori è necessario utilizzare l'attuale valori chiave associati Keys.ControlKey
, Keys.LShiftKey
, ecc ... (davvero nulla che si conclude con la chiave)
Quindi verificare se un determinato tasto è impostata può essere fatto come segue
var code = GetVirtualKeyCode(Key.A);
if ((array[code] & 0x80) != 0) {
// It's pressed
} else {
// It's not pressed
}
Vuoi tutti i tasti premuti quando si esegue una parte specifica di codice, o volete un evento che accade ogni volta che si preme un tasto? – zimdanen
possibile duplicato di [Il modo migliore per implementare le scorciatoie da tastiera in winforms?] (Http://stackoverflow.com/questions/400113/best-way-to-implement-keyboard-shortcuts-in-winforms) –
Dire che voglio avere un eventhandler per MouseWheel, ma voglio che venga premuto il tasto "Ctrl" quando eseguo qualcosa nell'EventHandler. quindi, se faccio scorrere la ruota, ottengo solo i risultati della rotellina del mouse, non la pressione del tasto. – Deukalion