我必须使用什么才能获得此刻键盘上按下的“所有键”?因为 Form.KeyPress += new EventHandler()
在充满控件时根本不会做太多事情。无论我做什么,它都不会调用它,无论是 KeyDown、KeyUp 还是其他任何东西……是的,我知道如何使用它们。
因此,如果系统中有任何函数可以检查按下的键,它会返回所用键的数组或其他东西 - 如果能指出正确的方向,我将不胜感激。
最佳答案
听起来你想查询键盘上所有键的状态。最好的函数是 Win32 API 调用 GetKeyboardState
我认为没有与该功能相当的管理良好的等效项。它的 PInvoke 代码相当简单
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetKeyboardState(byte [] lpKeyState);
var array = new byte[256];
GetKeyboardState(array);
这将使用系统中每个虚拟键的打开/关闭状态填充 byte[]
。如果设置了高位,则当前按下了虚拟键。将 Key
映射到虚拟键代码只需考虑数字 Key
值的 byte
部分即可。
public static byte GetVirtualKeyCode(Key key) {
int value = (int)key;
return (byte)(value & 0xFF);
}
以上适用于大多数 Key
值,但您需要小心修饰键。值 Keys.Alt
、Keys.Control
和 Keys.Shift
在这里不起作用,因为它们在技术上是修饰符而不是键值。要使用修饰符,您需要使用实际关联的键值 Keys.ControlKey
、Keys.LShiftKey
等...(实际上以 Key 结尾的任何内容)
因此检查是否设置了特定键可以按如下方式完成
var code = GetVirtualKeyCode(Key.A);
if ((array[code] & 0x80) != 0) {
// It's pressed
} else {
// It's not pressed
}
关于c# - 获取所有按下的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10484085/