5

许多使用keybd_event的示例,bScan 参数的值为 0x45。

那个 0x45 值是什么意思?

我的印象是 0x45 是键盘扫描码,但由于它用于不同数量的键,所以我不再那么确定了。

我的目标是使用keybd_event.NET P/Invoke 或 Delphi,并使类型更具限制性(例如使用枚举或标记的枚举),以便我的代码更易于维护。

4

1 回答 1

4

它确实是一个扫描码,对于许多键盘来说,它是 NumLock 键的扫描码。

文档中的示例代码keybd_event是如何切换 NumLock 状态的示例。因此自然而然地使用 0x45 作为扫描码。我的猜测是,您发现的许多其他示例只是盲目地从keybd_eventMSDN 示例中复制了该值。由于应用程序通常会忽略扫描码并响应虚拟键码,因此作为扫描码传递的值通常无关紧要。

最后,您需要使用SendInput而不是keybd_event. 原因是前者允许您在队列中放置一系列事件。随着keybd_event您一次将一个事件放入队列中,您的伪造事件可能会与真实事件穿插。SendInput而这个问题是引入的主要原因之一。

于 2013-02-25T10:42:10.987 回答