【问题标题】:Changing focus with Autohotkey, what is going on?用 Autohotkey 改变焦点,这是怎么回事?
【发布时间】:2016-03-15 03:12:29
【问题描述】:
我只想让我的脚本选择正确的窗口来输入按键。为此,我想我使用 WinActivate。我从他们的网站运行了示例,但在 Windows 10 中发现了一些奇怪的结果
IfWinExist, Untitled - Notepad
WinActivate ; use the window found above
else
WinActivate, Calculator;
- 如果记事本被最小化,它会获得焦点
- 如果记事本已打开但没有获得焦点(即另一个窗口位于其顶部),则记事本获得焦点
- 如果记事本未打开且计算器已最小化,则由于某种奇怪的原因无法获得焦点。
- 如果记事本未打开且计算器已打开但没有焦点,则获得焦点。
导致不一致的原因是什么?
【问题讨论】:
标签:
windows-10
autohotkey
【解决方案1】:
这是因为在语言上实现了 WinActivate 函数。 WinActivate 尝试打开一个窗口,但它可能无法打开。
来自documentation
将尝试六次激活目标窗口
60ms 的过程。因此,通常不需要遵循 WinActivate
使用 WinWaitActive 或 IfWinNotActive。
通常您可以尝试将 #WinActivateForce 指令与 WinWaitActive 或 IfWinNotActive 结合使用。
有时您可以使用ahk_exe 参数来匹配窗口。它可能在窗口标题没有的情况下起作用。在这种情况下,您将使用
尝试使用 WinRestore 恢复窗口也很有用。
SetTitleMatchMode, 2
IfWinExist, Bloco de notas
{
WinActivate ; use the window found above
}
else
{
WinRestore, ahk_exe calc.exe
WinActivate, ahk_exe calc.exe
}
我在 Win7 上,但上述方法对我有用。
这是一个 example 的一个很好的完整实现,它试图激活一个窗口。
【解决方案2】:
分号在 AHK 中引入 cmets。前面必须有一个空格,否则会被视为字符串的一部分(别名 winactivate "Calculator;")
所以,使用
WinActivate, Calculator ;
或者只是省略;,因为它没有任何贡献