在背景窗口中模拟鼠标单击

时间:2014-10-11 22:38:22

标签: c++ winapi input

我正在尝试使用SendMessage将鼠标点击发布到背景窗口(Chrome),这样可以正常工作,但每次点击后都会将窗口置于正面。有没有办法避免这种情况?

在有人说这是一个重复的问题之前,请确保其他主题实际上提到没有激活目标窗口,因为我找不到任何问题。

更新:啊哈,几乎可以隐藏窗口。它按预期接收模拟的鼠标/键盘事件,并且不会显示在屏幕上。但是,我几乎不能用自己的鼠标在电脑周围导航,键盘输入完全中断。

所以我的问题是,向窗口发送消息会如何影响其他应用程序?由于我实际上并不是模拟鼠标/键盘事件,其他窗口是否应该完全不知道呢? 是否可能与收到SetCapture时调用WM_LBUTTONDOWN的窗口有关?除了挂钩API调用之外我该如何避免这种情况(这对于这么小的任务来说会非常非常难看)?

1 个答案:

答案 0 :(得分:0)

系统提供的默认处理(通过DefWindowProc)会导致窗口显示在前面(点击时)作为对WM_MOUSEACTIVATE消息的响应,而不是WM_LBUTTONDOWN。< / p>

Chrome响应WM_LBUTTONDOWN而出现在前面这一事实表明Chrome是专门做的事情,而不是您可能以某种方式阻止的默认系统行为。

Chrome的源代码可用;我建议你看看它,看看它确实是Chrome正在做的事情。如果是这样,你能够阻止它的唯一实用方法(没有编译你自己的Chrome版本)就是将代码注入Chrome的进程并将其子类编入主窗口过程。