【发布时间】:2012-12-29 19:43:40
【问题描述】:
我用 C++ 编写了一个程序,它使用以下方法模拟对非活动窗口的点击:
PostMessage (z, WM_LBUTTONDOWN, 0,MAKELONG(t.left+x,t.top+y));
但只要点击它就会激活窗口并且窗口会移动到顶部。
有没有一种方法可以让窗口保持非活动状态或通过其他方式单击它?
我使用SetWindowPos(z , HWND_BOTTOM,....) 使该窗口位于 z 顺序列表的底部,但它仍会激活。
编辑:窗口是游戏机
【问题讨论】:
-
这当然是正常的,当您使用鼠标单击窗口时也会发生这种情况。不,如果您没有程序的源代码,则无法更改该行为。
-
我也在尝试做类似的事情。但是如果他有源代码呢?他要做什么?:)
-
在其他窗口(文件夹、记事本)上不会激活它们
-
如果你控制了目标窗口,你可以处理
WM_MOUSEACTIVATE消息来阻止窗口激活(通过返回MA_NOACTIVATE)。 -
合成输入
PostMessage是错误的工具。请改用SendInput。扩展 Jonathan Potter 的建议,即使您没有源代码,您也可以控制不属于您的窗口。您首先必须将代码放入目标进程(例如使用挂钩)。下一步是让该代码子类化目标窗口。一旦你的 WndProc 得到控制,你可以简单地忽略WM_MOUSEACTIVATE消息。但请注意,这不能保证有效。