tch*_*rty 8 windows autohotkey latex
这个关于使用 AutoHotKey 的问题特定于名为TeXnicCenter的 Windows LaTeX 编辑器。
所以,我试图编写我的第一个 AutoHotKey (AHK) 脚本,并希望快捷方式仅在 TeXniceCenter 窗口处于活动状态时可用。AHK 提供了IfWinActive关键字来处理这些场景,但是,我在使用这个关键字时遇到了一些困难。
这是我写的草稿文件:
SetTitleMatchMode, 2
SetTitleMatchMode, Slow
#IfWinActive, .* TeXnicCenter *.
!t::
Send \texttt{{}{}}
return
Run Code Online (Sandbox Code Playgroud)
该#IfWinActive, .* TeXnicCenter *.行,以便在窗口名称中的某处找到模式“TeXnicCenter”不起作用。
我放弃了其他一些选项
我用TeXnicCenter主要与项目,使窗口名称显示为“项目名称- TeXnicCenter”,所以这是不可行的,用这个作为参数IfWinActive。请注意,如果处理独立文档,则窗口名称为 TeXnicCenter。
AHK 提供的另一个选项是您使用称为ahk_class进程的东西,这通常是直观的(并且可以从名为 Window Spy 的方便的捆绑 AHK 工具中获得)——例如,在 Chrome 的情况下,它是Chrome_WidgetWin_1.
但是,对于 TeXnicCenter,它显示了奇怪的签名——例如,对于我的一个项目,它是Afx:000000013F370000:8:0000000000010005:0000000000000000:0000000012B80087,不仅如此,它在 TeXnicCenter 窗口中并不是恒定的,因为它通常用于其他进程。
我不知所措——有没有人有使用 TeXnicCenter 设置 AHK 并使用IfWinActive关键字的经验?我有一种感觉,这可能更好地针对 TeXnicCenter 的开发人员,但这是希望。
您曾经SetTitleMatchMode将标题匹配模式设置为2这意味着窗口的标题可以在其内部的任何位置包含 WinTitle 以进行匹配。所以,它试图.* TeXnicCenter *.在标题栏中查找。你应该删除.*和*.(除非标题栏实际上包含那些——据我所知,它没有)。RegEx如果您更愿意使用正则表达式语法,您可以将标题匹配模式设置为,(即使这样,*.也不正确,应该是.*)。
至于类,我在 GraphEdit 中遇到了同样的问题,它的主窗口有一个窗口类,类似于Afx:1000000:b:10011:6:1070780具有相同模式,但每个实例的编号不同。我通过使用正则表达式模式 ( SetTitleMatchMode, RegEx) 和类似的模式解决了这个问题^Afx:.+:.:.+:.:.+$——您可以指定冒号之间的确切位数,但您不太可能需要这样做。
(我最终通过使用groups简化了整个过程。)
因此,在您的情况下,您将使用以下方法之一:
SetTitleMatchMode, 2
SetTitleMatchMode, Slow
#IfWinActive, TeXnicCenter
!t::
Send \texttt{{}{}}
return
SetTitleMatchMode, regex
SetTitleMatchMode, Slow
#IfWinActive, .* TeXnicCenter *.
!t::
Send \texttt{{}{}}
return
Run Code Online (Sandbox Code Playgroud)
这是我的建议:
SetTitleMatchMode, regex
SetTitleMatchMode, Slow
GroupAdd, TXC, ^.*TeXnicCenter.*$ ahk_class ^Afx:.+:.:.+:.+:.*$
#IfWinExist, ahk_group TXC
!t::
Send \texttt{{}{}}
return
#IfWinExist
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7921 次 |
| 最近记录: |