2014-10-11 141 views
0

我试图使用SendMessage将鼠标点击发布到背景窗口(Chrome),该窗口可以正常工作,但每次单击后都会将窗口置于前端。有什么办法可以避免这种情况?在背景窗口中模拟鼠标点击

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

更新:啊哈,隐藏窗户的伎俩,几乎。它按照预期接收模拟的鼠标/键盘事件,并且不显示在屏幕上。但是,我只能使用我自己的鼠标在计算机周围导航,并且键盘输入完全中断。

所以我的问题是,如何发送消息到窗口影响其他应用程序?由于我实际上不是模拟鼠标/键盘事件,所以其他窗口不应该完全忽略这个吗? 当它收到WM_LBUTTONDOWN时,是否可能与调用SetCapture的窗口有关?除了钩住API调用(这对于这样一个小任务来说这会非常非常丑陋),我该如何避免这种情况?

+0

为什么你要发送点击Chrome呢?如果按照你所描述的那样工作,这对我来说似乎是一个很好的安全功能。 – mvp 2014-10-12 02:28:05

+0

你正在写一个Clicker Heroes机器人吗? :P – Domi 2015-01-17 17:59:12

回答

0

系统提供的默认处理方式(通过DefWindowProc)会导致窗口出现在前面(点击时)作为对WM_MOUSEACTIVATE消息的响应,而不是WM_LBUTTONDOWN

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

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

+0

实际上,它是我尝试点击的Flash应用,不确定Chrome是否决定在此情况下鼠标点击发生的情况。但从它的行为来判断,我几乎可以肯定它称之为“SetCapture”。我会试着劫持这个功能,看看它是否有帮助。 – riv 2014-10-12 03:00:25

+0

@riv鼠标点击必须通过Chrome才能到达您的Flash应用程序。我猜想Chrome会认为:如果有人用浏览器弄虚作假,你可能想知道它。我认为这是一个很大的安全功能。 – Domi 2015-01-17 17:58:54