gpt4 book ai didi

c# - 获取所有按下的键

转载 作者:太空狗 更新时间:2023-10-29 22:08:22 28 4
gpt4 key购买 nike

我必须使用什么才能获得此刻键盘上按下的“所有键”?因为 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.AltKeys.ControlKeys.Shift 在这里不起作用,因为它们在技术上是修饰符而不是键值。要使用修饰符,您需要使用实际关联的键值 Keys.ControlKeyKeys.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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com