WM_KEYDOWN:如何使用它?
我想通过PostMessage将关键笔划发送到一个应用程序。我也使用Spy ++来试图理解如何发送消息,因为我没有完全理解它的内部工作原理。WM_KEYDOWN:如何使用它?
在此画面中,第一项(所选项目)与采用自制的实际关键笔划制成。与它周围的红色elipse的一个(下图)与下面的代码所做的:
WinApi.PostMessage(InsideLobbyHandle, WinApi.WM_KEYDOWN, (int)WinApi.VK_UP, 1);
我猜它必须是与最后一个PostMessage的()的参数,但我想不出如何真的有用。我可以在原始键击中看到ScanCode = 48,并且在我的0中,并且fExtended是1,在我的中是0.我怎样才能让它看起来一样?
在http://msdn.microsoft.com/en-us/library/ms646280(VS.85).aspx我不明白最后一个参数的工作。
使用SendInput而不是PostMessage模拟键盘输入。
您不能simulate keyboard input with PostMessage。
还有some caveats相对于键盘状态/异步状态:
的SendInput函数不会重置 键盘的当前状态。 因此,如果用户在调用此函数时按下了任何键 ,它们可能会干扰此函数生成的事件 。如果您 担心可能的 干扰,请使用GetAsyncKeyState 函数检查键盘的 状态,并根据需要进行更正。
的lParam的用于WM_KEYDOWN Notification在字段的比特的术语指定:
- 前16位是重复计数
- 下一8位是扫描码
- 下一位为1表示扩展密钥,否则为0
- 接下来的4位保留,必须为0
- 下位始终为0(为WM_KEYDOWN)
- 下一位是前国家重点
- 最后一位始终为0(为WM_KEYDOWN)
警告:您构建的任何解决方案基于PostMessage周围会变得非常脆弱。
在Spy ++中,如果右键单击突出显示的(记录的消息)条目并查看其属性,则可以看到lParam的确切值。然后你可以使用它作为你的lParam来确保PostMessage产生类似的效果,就像手动操作一样。
嗯,我想用这个,因为它会允许我发送输入而不在窗口上具有焦点。有没有其他方法可以实现这一点? – 2009-07-23 07:41:12