Parece que desea consultar el estado de todas las teclas del teclado. La mejor función para la que es el Win32 API llamada GetKeyboardState
No creo que hay una buena equivalente logrado de esa función. El código PInvoke porque es bastante sencillo
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetKeyboardState(byte [] lpKeyState);
var array = new byte[256];
GetKeyboardState(array);
Esto rellenará el byte[]
con las flechas arriba/abajo estado de cada tecla virtual en el sistema. Si se establece el bit alto, entonces la tecla virtual está actualmente presionada. La asignación de un Key
a un código de clave virtual se realiza considerando únicamente la parte byte
del valor numérico Key
.
public static byte GetVirtualKeyCode(Key key) {
int value = (int)key;
return (byte)(value & 0xFF);
}
Los trabajos anteriores para la mayoría de los valores Key
pero hay que tener cuidado con las teclas modificadoras. Los valores Keys.Alt
, Keys.Control
y Keys.Shift
no funcionarán aquí porque técnicamente son modificadores y no valores clave. Para utilizar modificadores es necesario utilizar los valores de las claves asociadas reales Keys.ControlKey
, Keys.LShiftKey
, etc ... (en realidad cualquier cosa que termina con llave)
lo que comprobar si una clave particular, se establece que se puede hacer de la siguiente manera
var code = GetVirtualKeyCode(Key.A);
if ((array[code] & 0x80) != 0) {
// It's pressed
} else {
// It's not pressed
}
¿Desea que se presionen todas las teclas cuando ejecuta una pieza específica de código, o desea un evento que ocurre cada vez que se presiona una tecla? – zimdanen
posible duplicado de [¿La mejor forma de implementar accesos directos de teclado en winforms?] (Http://stackoverflow.com/questions/400113/best-way-to-implement-keyboard-shortcuts-in-winforms) –
Digamos que quiero tener un controlador de eventos para MouseWheel, pero quiero que se presione la tecla "Ctrl" cuando ejecuto algo en el EventHandler. así que si muevo la rueda solo obtengo los resultados de la rueda del mouse, no la de la tecla. – Deukalion