我已经看过20个问题(这里是@ stackOverflow)但是由于某些原因我得不到他们接近的大部分答案。其他人说他们理解,但在我的案例中我没有看到任何工作代码。
我试图将密钥发送到游戏(前景窗口),就像一个宏,我已经看到 lParam 如何: PostMessage( handle,WM_KEYDOWN,(uint)key,0); 实际上有所不同;根据网络上的人(他们说,但不显示代码/示例)。第一次使用win功能,所以我对如何使它适用于某些游戏感到很失望;让我们说“英雄联盟”,或“团队要塞2”。
我得到它是一个额外的参数,作为一种解释消息的方式。但是如何让它与大多数游戏一起使用?每个游戏都有不同的工作方式吗?
提前致谢,对于我的具有胜利功能的noobie-ism感到抱歉。
此致,
Armando Leon
答案 0 :(得分:1)
最好的选择是documentation for WM_KEYDOWN。
答案 1 :(得分:1)
对于按键,您可以在此链接中查看lParam包含的内容:http://msdn.microsoft.com/en-us/library/ms646280(v=vs.85).aspx。如果您只是为lParam传递wParam和0,它可能适用于仅使用虚拟键码(包含在wParam中)的游戏,但不能用于使用扫描码(在lParam中传递)的游戏中。
你可以做的是编写一个实用程序,打印出用于按键的wParam和lParam(以及你希望发送给游戏的任何其他事件(wm_char,wm_keyup等))。然后你可以使用它来获得你想要的任何组合键的wParam和lParam,然后如果你将它传递给它应该工作的任何游戏。传递所有正确的值只是确保它在所有情况下都能正常工作的方法。
答案 2 :(得分:1)
您无法使用PostMessage()
伪造输入。相反,您需要使用SendInput()
。
答案 3 :(得分:0)
我知道这是一个老话题,但我不能让别人说"你不能用PostMessage()"伪造输入。 当我们搜索"如何更改lparam postmessage"时,这个帖子会显示在谷歌上。
让我们想象一下,我需要将一个Enter键发送到另一个程序:我将使用Spy ++并按下我需要检查的关键字,以检查我需要的常量以及什么是我需要的lParam值。 (对于constand,你也可以在这里查看http://msdn.microsoft.com/en-us/library/dd375731(v=vs.85).aspx)
检查keydown,而不是keyup。
所以,如果我需要一个带有cRepeat的Enter键:1扫描码:29 fExtended:0 AltDown:0 fRepeat:0 fUp:0,
我必须更改lParam的32位,我必须在这里理解数组http://msdn.microsoft.com/en-us/library/ms646280%28v=vs.85%29.aspx
这些位是这样的:31 .... 3 2 1 0
我需要1对于cRepeat所以:0000 0000 0000 0001(数组中的位0到15)
扫描码需要29(以六进制表示),因此:0010 1001(第16至23位)
其余部分为零
现在我重新组合我需要的lparam(二进制):0010 1001 0000 0000 0000 0001
我将其转换为十六进制:290001
所以现在在我的程序中,如果我使用它,它将会起作用: PostMessage(hWnd,WM_KEYDOWN,VK_RETURN,0x290001);
我希望它会帮助那些像我一样来到这里的人们。
的Seb,