Delphi keybd_事件中bScan参数值0x45的含义是什么?
如果使用,则bScan参数的值为0x45 0x45值的含义是什么 我有这样的印象,但由于它被用于各种各样的钥匙,我不再那么肯定了Delphi keybd_事件中bScan参数值0x45的含义是什么?,delphi,winapi,pinvoke,Delphi,Winapi,Pinvoke,如果使用,则bScan参数的值为0x45 0x45值的含义是什么 我有这样的印象,但由于它被用于各种各样的钥匙,我不再那么肯定了 我的目标是使用.NET p/Invoke或Delphi中的keybd_event,并使类型更加严格(例如使用枚举或标记的枚举),以便我的代码更易于维护。它确实是一个扫描代码,对于许多键盘来说,它是NumLock键的扫描代码 keybd_event文档中附带的示例代码是如何切换NumLock状态的示例。因此,0x45自然被用作扫描代码。我的猜测是,您发现的许多其他示例只
我的目标是使用.NET p/Invoke或Delphi中的
keybd_event
,并使类型更加严格(例如使用枚举或标记的枚举),以便我的代码更易于维护。它确实是一个扫描代码,对于许多键盘来说,它是NumLock键的扫描代码
keybd_event
文档中附带的示例代码是如何切换NumLock状态的示例。因此,0x45自然被用作扫描代码。我的猜测是,您发现的许多其他示例只是盲目地复制了keybd_事件中的值。由于和响应虚拟密钥代码,所以通常不关心作为扫描代码传递的值
最后,您需要使用SendInput
而不是keybd\u事件
。原因是前者允许您在队列中放置一系列事件。使用keybd_event
将事件一次一个地放入队列中,您的伪造事件可能会与真实事件混杂在一起。这个问题是引入SendInput
的主要原因之一。Delphi忽略扫描代码信息,例如在生成OnKeyDown
事件时。如果有人需要提取密钥扫描代码,他应该直接处理相应的windows消息(例如WM_KEYDOWN)。谢谢。我给你打一针。稍后我们会回来的。