Many examples使用keybd_event,对于bScan参数具有值0x45。keybd_event中bScan参数值0x45的含义是什么?
什么是0×45值的含义?
我的印象0x45 was a keyboard scancode下,但因为它是用于各种数字键的,我不这么认为了。
我的目标是使用来自.NET P/Invoke或Delphi的keybd_event
,并使类型更具限制性(例如使用枚举或标记的枚举),这样我的代码变得更容易维护。
Many examples使用keybd_event,对于bScan参数具有值0x45。keybd_event中bScan参数值0x45的含义是什么?
什么是0×45值的含义?
我的印象0x45 was a keyboard scancode下,但因为它是用于各种数字键的,我不这么认为了。
我的目标是使用来自.NET P/Invoke或Delphi的keybd_event
,并使类型更具限制性(例如使用枚举或标记的枚举),这样我的代码变得更容易维护。
这确实是一个扫描代码和许多键盘是对于NumLock键扫描码。
附着到keybd_event
文档的例子的代码是如何来切换数字锁定状态的例子。自然,0x45被用作扫描码。我的猜测是,您发现的很多其他示例只是简单地复制了来自keybd_event
MSDN示例的值。由于applications typically ignore the scan code并且对虚拟键码进行响应,因此扫描码通常会传递什么值并不重要。
最后,你需要使用SendInput
而非keybd_event
。原因是前者允许您在队列中放置一系列事件。通过keybd_event
,您可以将事件放入队列中,并且您的假事件可能会穿插真实事件。而这个问题是SendInput
被引入的主要原因之一。
德尔福忽略扫描代码信息,当生成'OnKeyDown'事件时。如果有人需要提取密钥扫描码,他应该直接处理相应的Windows消息(例如WM_KEYDOWN)。 – kludg 2013-02-25 11:14:14
谢谢。我将给[SendInput](http://msdn.microsoft.com/en-us/library/windows/desktop/ms646310)和[P/Invoke SendInput](http://www.pinvoke.net/default。 aspx/user32.sendinput)一枪。稍后会回来。 – 2013-03-03 21:37:10