繁体   English   中英

模拟鼠标在后台窗口中的单击

[英]Simulate mouse click in background window

我正在尝试使用SendMessage将鼠标单击发布到后台窗口(Chrome),该窗口工作正常,但每次单击后都将窗口置于最前面。 有什么办法可以避免这种情况?

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

更新:啊哈,隐藏窗口几乎可以解决问题。 它会按预期接收模拟的鼠标/键盘事件,并且不会显示在屏幕上。 但是,我几乎无法使用自己的鼠标来浏览计算机,并且键盘输入已完全中断。

所以我的问题是,向窗口发送消息如何影响其他应用程序? 由于我实际上并不是在模拟鼠标/键盘事件,因此其他窗口不应该完全忽略吗? 它在收到WM_LBUTTONDOWN时可能与调用SetCapture的窗口有关? 除了挂接API调用(对于这么小的任务而言,这非常丑陋)之外,我又如何避免这种情况?

系统提供的默认处理(通过DefWindowProc )使窗口位于最前面(单击时),作为对WM_MOUSEACTIVATE消息而不是WM_LBUTTONDOWN的响应。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM