我知道这是一个旧线程,但我不能让别人说“你不能用 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);
我希望它能帮助像我一样来到这里的人:)
塞布,