许多使用keybd_event的示例,bScan 参数的值为 0x45。
那个 0x45 值是什么意思?
我的印象是 0x45 是键盘扫描码,但由于它用于不同数量的键,所以我不再那么确定了。
我的目标是使用keybd_event
.NET P/Invoke 或 Delphi,并使类型更具限制性(例如使用枚举或标记的枚举),以便我的代码更易于维护。
许多使用keybd_event的示例,bScan 参数的值为 0x45。
那个 0x45 值是什么意思?
我的印象是 0x45 是键盘扫描码,但由于它用于不同数量的键,所以我不再那么确定了。
我的目标是使用keybd_event
.NET P/Invoke 或 Delphi,并使类型更具限制性(例如使用枚举或标记的枚举),以便我的代码更易于维护。
它确实是一个扫描码,对于许多键盘来说,它是 NumLock 键的扫描码。
文档中的示例代码keybd_event
是如何切换 NumLock 状态的示例。因此自然而然地使用 0x45 作为扫描码。我的猜测是,您发现的许多其他示例只是盲目地从keybd_event
MSDN 示例中复制了该值。由于应用程序通常会忽略扫描码并响应虚拟键码,因此作为扫描码传递的值通常无关紧要。
最后,您需要使用SendInput
而不是keybd_event
. 原因是前者允许您在队列中放置一系列事件。随着keybd_event
您一次将一个事件放入队列中,您的伪造事件可能会与真实事件穿插。SendInput
而这个问题是引入的主要原因之一。