1

我已经看到了 20 个问题(这里是 @stackOverflow)但由于某种原因,我没有得到他们所接近的大部分答案。其他人说他们理解,但在我的案例中我没有看到任何工作代码。

我试图将键发送到游戏(前台窗口)有点像宏,我已经看到lParam如何在:PostMessage(handle, WM_KEYDOWN, (uint)key, 0); 实际上有所作为;根据网络上的人(他们说,但不显示代码/示例)。第一次使用胜利功能,所以我有点迷失如何让它与一些游戏一起工作;比如说“英雄联盟”或“军团要塞 2”。

我知道这是一个额外的参数,作为解释消息的一种方式。但是我如何使它适用于大多数游戏呢?每个游戏的工作方式都不同吗?

在此先感谢,并为我的带有 win 功能的 noobie 主义感到抱歉。

真挚地,

阿曼多·莱昂

4

4 回答 4

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,然后如果您将它传递给任何游戏,它应该可以工作。传递所有正确的值是确保它在所有情况下都能正常工作的唯一方法。

于 2011-06-27T19:06:02.007 回答
1

您最好的选择是WM_KEYDOWN 的文档

于 2011-06-27T19:02:47.647 回答
1

你不能用PostMessage(). 相反,您需要使用SendInput().

于 2011-06-27T19:36:11.547 回答
0

我知道这是一个旧线程,但我不能让别人说“你不能用 PostMessage() 伪造输入”。当我们搜索“如何更改 lparam postmessage”时,此线程会显示在 google 上。

假设我需要向另一个程序发送一个 Enter 键:我将使用 Spy++ 并物理按下我需要检查我需要的常量是什么以及我需要的 lParam 值是什么。(对于常量,您也可以在这里 查看http://msdn.microsoft.com/en-us/library/dd375731(v=vs.85).aspx
检查 keydown,而不是 keyup。

因此,如果我需要一个带有 cRepeat 的 Enter 键:1 Scancode: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);

我希望它能帮助像我一样来到这里的人:)

塞布,

于 2014-07-21T18:40:04.697 回答