如何在模拟点击时保持窗口处于非活动状态?

4

我用C++编写了一个程序,可以模拟在非活动窗口上的点击,使用如下:

PostMessage (z, WM_LBUTTONDOWN, 0,MAKELONG(t.left+x,t.top+y));

但是每次点击它时,它都会激活窗口并将窗口移动到顶部。

有没有办法让窗口保持不活动或者另一种点击方式?

我使用了SetWindowPos(z , HWND_BOTTOM,....)来使该窗口位于z-order列表的底部,但它仍然会被激活。

编辑:该窗口是一个游戏控制台。


1
这是很正常的,当你使用鼠标点击窗口时也会发生这种情况。如果你没有程序源代码,就无法更改该行为。 - Hans Passant
我也在尝试做类似的事情。但是如果他有源代码呢?他需要做什么? :) - Victor
使用GetActiveWindow()获取当前活动窗口,发送点击事件后再使用SetActiveWindow(),这样它就不再是活动窗口了。实际上,Get/SetForegroundWindow可能更符合您的需求。 - paulm
4
如果你控制目标窗口,可以处理 WM_MOUSEACTIVATE 消息来防止该窗口被激活(通过返回 MA_NOACTIVATE)。 - Jonathan Potter
1
合成输入的 PostMessage 是错误的工具。请使用 SendInput。扩展Jonathan Potter所建议的,即使您没有源代码,也可以控制您不拥有的窗口。首先,您必须将您的代码放入目标进程中(例如使用钩子)。下一步是让该代码子类化目标窗口。一旦您的 WndProc 掌控了控制权,您就可以简单地忽略 WM_MOUSEACTIVATE 消息。但请注意,这并不能保证有效。 - IInspectable
显示剩余6条评论
1个回答

0
尝试将PostMessage切换为SendInput,看看是否会出现相同的效果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接