Autohotkey WinActivate未按预期工作。将焦点重新激活到起始窗口

Autohotkey WinActivate未按预期工作。将焦点重新激活到起始窗口,autohotkey,Autohotkey,我有一些严重的斗争完全掌握激活窗口的控制,并迫使他们的重点和首要位置 为了调试一个更大的脚本,我制作了一个单独的脚本来测试WinActivate的使用,我再次观察到令人沮丧的行为,因为它要么一起忽略了我定义的标题,要么以其他方式失败。在较小的测试脚本中,我只是请求在另一个操作(特别是输入框)之后将触发热键的窗口设置为活动 下面是测试的简单代码: F10:: SetTitleMatchMode, 1 DetectHiddenWindows, Off WinGetTitl

我有一些严重的斗争完全掌握激活窗口的控制,并迫使他们的重点和首要位置

为了调试一个更大的脚本,我制作了一个单独的脚本来测试WinActivate的使用,我再次观察到令人沮丧的行为,因为它要么一起忽略了我定义的标题,要么以其他方式失败。在较小的测试脚本中,我只是请求在另一个操作(特别是输入框)之后将触发热键的窗口设置为活动

下面是测试的简单代码:

F10::

    SetTitleMatchMode, 1
    DetectHiddenWindows, Off

    WinGetTitle, startTitle, A
    msgbox % "Start Title = <" . startTitle . ">"

    ;WinActivate, startTitle

    inputbox, mode, Test box,  Testing,,260,160
    sleep 500
    WinActivate,  startTitle

Return
F10::
SetTitleMatchMode,1
德登斯探测仪,关闭
Wingtitle,startTitle,A
msgbox%“开始标题=”
;温特莱特
输入框,模式,测试框,测试,260160
睡500
温特莱特
返回
此代码未正确激活启动窗口。例如,我在一个空的记事本窗口中执行热键,在将空白提交到输入框时,焦点在我的第二个显示器上变成记事本+。第二次从记事本(或其他应用程序)内按热键记事本不会失去焦点。在第三次执行中,我再次从记事本开始,在输入框出现后,我将焦点切换到另一个窗口。我再次向输入框提交空白,但新窗口仍然是焦点,记事本没有激活或放在最前面的位置

有人能给我解释一下WinActivate的情况吗?


我对生成windows脚本主机文件的意外结果也有类似的失望,我想我一定是缺少了windows中的一些基本细节。

您正在尝试激活一个以文本“startTitle”开头的窗口。
您忘记了(?)使用
%
输入表达式语法,或者使用引用变量
%startTitle%
的旧方法(请不要使用旧方法)

额外材料:
您不应该在热键语句中指定
SetTitleMatchMode
DetectThiddenWindows
。没有必要(除非确实有)在每次按下热键时设置这些设置。只需在脚本顶部指定一次即可。
不过,这两种方法对你都没用,下面我将说明原因。默认情况下,
DetectThiddenWindows
也已关闭

wingtittle
不适合用于此。实际上,您要做的是使用例如…
然后通过窗口的hwnd引用该窗口。比使用窗口标题要好得多,也不可能匹配错误的窗口。要通过窗口的hwnd引用窗口,请在参数上指定
ahk_id
,后跟hwnd

最后,串联运算符
是冗余的。当然,你可能更喜欢使用它,但如果你不知道,可以忽略它

这是您修改后的代码:

F10::
    _HWND := WinExist("A")
    MsgBox, % "Start hwnd = <" _HWND ">"
    InputBox, mode, Test box,  Testing,,260,160
    Sleep, 500
    WinActivate, % "ahk_id " _HWND
Return
F10::
_HWND:=WinExist(“A”)
MsgBox,%“开始hwnd=”
输入框,模式,测试框,测试,260160
睡吧,500
WinActivate,%%“ahk_id”\u HWND
返回

感谢您的解释。今天早上,我认为文字标题可能是一种不可靠的方式•我不知道它没有扩展语句中的变量,这需要我进行更多的阅读,以掌握上下文差异•标题匹配模式最初不存在,但随着执行失败和我尝试新事物而添加。我可能仍然需要将这些作为冗余操作包含在实际脚本中。它们是否在热键范围内处于活动状态,然后恢复谢谢你的帮助。提示:我将测试并标记正确的语法是的,当您开始使用时,遗留的vs表达式语法可能会有点混乱。阅读可能会有所帮助。不,它们不仅在热键的范围内是活动的。如果您想临时更改它们,可以使用相应的
A_…
变量(
A_DetectHiddenWindows
A_TitleMatchMode
)获取当前值,并在热键的末尾或其他位置更改回该值。