在 AutoHotKey 中使用 IfWinActive 关键字

在 AutoHotKey 中使用 IfWinActive 关键字

关于 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

相关内容