我有以下脚本将ControlClick + ControlSend发送到后台窗口(而我在另一个窗口中工作)。它按预期工作正常。
SetTitleMatchMode 2
$F1::
sleep 1000
ControlClick, x400 y470, Notepad
ControlSend,, text, Notepad
return
问题是:当我在脚本上添加一个Gui时,一旦我关闭Gui(使用Submit或Destroy),ControlClick行为就会变得奇怪:如果我在窗口A(例如Chrome)中工作ControlClick不再在后台工作:它会激活窗口B(记事本),就像在WinActivate命令中一样。
这里是带有问题的脚本(与前一个相同,但只有一个简单的Gui):
SetTitleMatchMode 2
Gui, Add, Text,, box
Gui, Add, Button, default, OK
Gui, Show, W300 H300
return
GuiClose:
ButtonOK:
Gui, Submit
return
$F1::
sleep 1000
ControlClick, x400 y470, Notepad
ControlSend,, text, Notepad
return
我在Windows Vista 32位,Autohotkey v1.1.25.01
我无法理解为什么Gui Submit正在改变ControlClick行为。我如何解决这个问题,让ControlClick在后台运行,就像没有Gui Submit / Destroy一样?
ps:两个窗口都被最大化了。
答案 0 :(得分:1)
已知ControlClick在某些情况下不是非常可靠。看一下Reliability section in the ControlClick
documentation,您可以尝试一些事项:
提高可靠性 - 尤其是在用户使用时 在ControlClick期间物理移动鼠标 - 一个或两个 以下内容可能有所帮助:
在ControlClick之前使用
SetControlDelay -1
。这避免了持有 点击期间鼠标按钮按下,这反过来减少 来自用户的鼠标物理移动的干扰。- 醇>
在第六个参数(选项)中的任意位置指定字符串NA 如下所示:
SetControlDelay -1 ControlClick, Toolbar321, WinTitle,,,, NA
NA避免将目标窗口标记为活动并避免 将其输入处理与脚本的输入处理合并,这可能是 防止鼠标的物理运动干扰(但通常 仅当目标窗口未激活时)。但是,这种方法可能会 不适用于所有类型的窗户和控件。