2013-02-25 158 views

回答

5

这确实是一个扫描代码和许多键盘是对于NumLock键扫描码。

附着到keybd_event文档的例子的代码是如何来切换数字锁定状态的例子。自然,0x45被用作扫描码。我的猜测是,您发现的很多其他示例只是简单地复制了来自keybd_event MSDN示例的值。由于applications typically ignore the scan code并且对虚拟键码进行响应,因此扫描码通常会传递什么值并不重要。

最后,你需要使用SendInput而非keybd_event。原因是前者允许您在队列中放置一系列事件。通过keybd_event,您可以将事件放入队列中,并且您的假事件可能会穿插真实事件。而这个问题是SendInput被引入的主要原因之一。

+1

德尔福忽略扫描代码信息,当生成'OnKeyDown'事件时。如果有人需要提取密钥扫描码,他应该直接处理相应的Windows消息(例如WM_KEYDOWN)。 – kludg 2013-02-25 11:14:14

+0

谢谢。我将给[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