keybd_event中bScan参数值0x45的含义是什么?

Jer*_*ers 5 delphi pinvoke winapi

许多使用keybd_event的示例都具有bScan参数的值0x45.

0x45值是什么意思?

我的印象是0x45是键盘扫描码,但由于它用于各种键,我不再那么肯定了.

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

Dav*_*nan 5

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

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

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