![在 AutoHotKey 中使用 IfWinActive 关键字](https://linux22.com/image/1334420/%E5%9C%A8%20AutoHotKey%20%E4%B8%AD%E4%BD%BF%E7%94%A8%20IfWinActive%20%E5%85%B3%E9%94%AE%E5%AD%97.png)
关于 AutoHotKey 使用的这个问题特定于 Windows LaTeX 编辑器,名为技术中心。
因此,我尝试编写我的第一个 AutoHotKey (AHK) 脚本,并希望快捷键仅在 TeXniceCenter 窗口处于活动状态时可用。AHK 提供了关键字IfWinActive
来处理这些情况,但是,我在使用此关键字时遇到了一些困难。
这是我写的草稿文件:
SetTitleMatchMode, 2
SetTitleMatchMode, Slow
#IfWinActive, .* TeXnicCenter *.
!t::
Send \texttt{{}{}}
return
该#IfWinActive, .* TeXnicCenter *.
行,使得在窗口名称中的某处找到的模式“TeXnicCenter”不起作用。
我放弃了一些其他选择
我主要在项目中使用 TeXnicCenter,因此窗口名称显示为“项目名- TeXnicCenter”,因此将其用作的参数是不可行的
IfWinActive
。请注意,如果处理独立文档,窗口名称为 TeXnicCenter。AHK 提供的另一个选项是使用所谓的
ahk_class
进程,它通常是直观的(可以从方便的捆绑 AHK 工具 Window Spy 中获得) - 例如,在 Chrome 的情况下,它是Chrome_WidgetWin_1
。
然而,对于 TeXnicCenter,它显示出奇怪的特征——例如,对于我的一个项目,它是Afx:000000013F370000:8:0000000000010005:0000000000000000:0000000012B80087
,不仅如此,它不是恒定的跨 TeXnicCenter 窗口,就像其他过程通常一样。
我很困惑——有人有使用 TeXnicCenter 设置 AHK 和使用关键字的经验吗IfWinActive
?我觉得这可能更适合 TeXnicCenter 的开发人员,但希望如此。
答案1
您曾经SetTitleMatchMode
将标题匹配模式设置2
为窗口标题可以在其内部的任何位置包含 WinTitle 以进行匹配。因此,它试图.* TeXnicCenter *.
在标题栏中找到。您应该删除.*
和*.
(除非标题栏实际上包含这些内容 - 据我所知,它不是)。如果您更愿意使用正则表达式语法,则可以将标题匹配模式设置为RegEx
(即使这样, 也是*.
不正确的,应该是.*
)。
至于类,我在 GraphEdit 中遇到了同样的问题,它对于主窗口有一个窗口类,Afx:1000000:b:10011:6:1070780
具有相同的模式,但每个实例的数字不同。我通过使用正则表达式模式 ( SetTitleMatchMode, RegEx
) 和类似模式解决了这个问题^Afx:.+:.:.+:.:.+$
—您可以在冒号之间指定确切的数字,但您不太可能需要到。
(我最终通过使用群组。
因此,对于您的情况,您可以使用下列方法之一:
SetTitleMatchMode, 2
SetTitleMatchMode, Slow
#IfWinActive, TeXnicCenter
!t::
Send \texttt{{}{}}
return
SetTitleMatchMode, regex
SetTitleMatchMode, Slow
#IfWinActive, .* TeXnicCenter *.
!t::
Send \texttt{{}{}}
return
以下是我的建议:
SetTitleMatchMode, regex
SetTitleMatchMode, Slow
GroupAdd, TXC, ^.*TeXnicCenter.*$ ahk_class ^Afx:.+:.:.+:.+:.*$
#IfWinExist, ahk_group TXC
!t::
Send \texttt{{}{}}
return
#IfWinExist