我正试图通过PostMessage向一个应用程序发送一个键击。我使用Spy ++来试图理解如何发送消息,因为我不完全理解它的内部工作原理。
在这张照片中,第一个项目(选定项目)是由我自己制作的实际击键。在它周围(下面)有一个红色椭圆的那个是用以下代码制作的:
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中,我无法理解最后一个参数的工作情况。
答案 0 :(得分:13)
使用SendInput模拟键盘输入,而不是PostMessage。
你不能simulate keyboard input with PostMessage。
键盘状态/异步状态仍有some caveats:
SendInput功能不会重置 键盘的当前状态。 因此,如果用户有任何键 当你调用这个函数时按下, 他们可能会干扰这些事件 这个函数生成的。如果你 关心可能 干扰,检查键盘 使用GetAsyncKeyState进行状态 功能并在必要时纠正。
WM_KEYDOWN Notification的lParam是根据字段的位数指定的:
警告:你基于PostMessage构建的任何解决方案都会非常脆弱。
答案 1 :(得分:1)
看看http://inputsimulator.codeplex.com,它包含了Kevin提到的SendInput
方法
答案 2 :(得分:0)
在Spy ++中,如果右键单击突出显示的(已记录的消息)条目并查看其属性,则可以看到lParam的确切值。然后,您可以将其用作lParam,以确保PostMessage产生与手动操作类似的效果。