Autohotkey 自动热键:SetTitleMatchMode神秘地设置为1

Autohotkey 自动热键:SetTitleMatchMode神秘地设置为1,autohotkey,Autohotkey,今天,在我的主自动热键脚本中,所有特定于应用程序的热键和热键都神秘地停止工作。经过大量调试后,我发现SetTitleMatchMode在后台被设置为1…尽管我从未在代码中显式地这样做。 所以,我所有的指令都像 #IfWinActive Some Window Substring …不再工作了 代码行 SetTitleMatchMode 2 已在代码中,并且未修复该问题 以前有人见过这个问题吗 我目前的假设是 #Include SomeOtherScript.ahk 自动将标题匹配模式设置

今天,在我的主自动热键脚本中,所有特定于应用程序的热键和热键都神秘地停止工作。经过大量调试后,我发现SetTitleMatchMode在后台被设置为1…尽管我从未在代码中显式地这样做。 所以,我所有的指令都像

#IfWinActive Some Window Substring 
…不再工作了

代码行

SetTitleMatchMode 2
已在代码中,并且未修复该问题

以前有人见过这个问题吗

我目前的假设是

#Include SomeOtherScript.ahk
自动将标题匹配模式设置为1,除非“SomeOtherScript.ahk”显式有一条语句将SetTitleMatchMode设置为其他值。 但这是一个薄弱的假设。Include语句在那里已经存在很长时间了。

,您的
SetTitleMatchMode 2
需要执行才能产生任何效果,如果它不在脚本顶部,则可能不在autoexecute部分

通过添加一些临时日志记录,这样的问题通常很容易解决:

...

SetTitleMatchMode 2
MsgBox DEBUG1 SetTitleMatch is %A_TitleMatchMode%

... some code ...

MsgBox DEBUG2 SetTitleMatch is %A_TitleMatchMode%

... some more code ...

MsgBox DEBUG3a SetTitleMatch is %A_TitleMatchMode%
#Include SomeOtherScript.ahk
MsgBox DEBUG3b SetTitleMatch is %A_TitleMatchMode%
您还可以使用类似于
grep
的搜索工具搜索文件夹,以检查隐藏在代码中的意外或遗忘的
SetTitleMatch
语句:

C:\> grep -iR SetTitleMatch .

第三种选择是尝试分而治之的方法来隔离导致问题的代码。保存您的工作,然后删除一半代码,看看问题是否仍然存在。如果仍有问题,请删除剩余代码的一半,然后再次检查。如果通过删除一些代码解决了问题,请将删除的代码添加回一半,然后再次检查。最后,如果运气好的话,您将隔离并确定导致问题的陈述

您还做了哪些更改
SetTitleMatchMode,2
需要在自动执行部分。包含的文件可以通过返回或调用SetTitleMatchMode来结束自动执行部分。
#Include
语句本身对标题匹配模式没有任何作用。+1用于分而治之的方法。在Autohotkey中,一个看似无辜的语句可能会影响脚本完全不同部分中完全不相关的内容,因此这可能是必要的。Jim U:通过%a_TitleMatchMode%访问TitleMatchMode值的功能正是我想要的。你搞定了。您的建议,再加上Oleg对auto execute部分的评论,帮助我找到了根本原因:结果是我在结束auto execute部分的Include程序中添加了一条语句。由于我的SetTitleMatchMode语句在include语句之后,对include程序的这一小更改意味着我的SetTitleMatchMode语句永远不会被识别。