AutoHotKeyの使用に関するこの質問は、 TeXnicCenter と呼ばれるWindowsLaTeXエディターに固有のものです。
そのため、私は最初のAutoHotKey(AHK)スクリプトを作成しようとしていて、TeXniceCenterウィンドウがアクティブなときにのみショートカットを使用できるようにしたいと考えていました。 AHKはこれらのシナリオに対処するためにIfWinActive
キーワードを提供していますが、このキーワードを使用する際にいくつかの問題が発生しました。
これが私が書いたドラフトファイルです:
SetTitleMatchMode, 2
SetTitleMatchMode, Slow
#IfWinActive, .* TeXnicCenter *.
!t::
Send \texttt{{}{}}
return
#IfWinActive, .* TeXnicCenter *.
行であるため、ウィンドウ名のどこかにパターン「TeXnicCenter」が見つかりますが機能しません。
私が捨てた他のいくつかのオプションがありました
TeXnicCenterは主にプロジェクトで使用しているため、ウィンドウ名は「projectname-TeXnicCenter」と表示されるため、これをIfWinActive
の引数として使用することはできません。スタンドアロンドキュメントで作業している場合、ウィンドウ名はTeXnicCenterであることに注意してください。
AHKが提供するもう1つのオプションは、プロセスのahk_class
と呼ばれるものを使用することです。これは通常、直感的です(Window Spyと呼ばれる便利なバンドルAHKツールから入手できます)。たとえば、Chromeの場合は次のようになります。 Chrome_WidgetWin_1
。
ただし、TeXnicCenterの場合、奇妙な署名が表示されます。たとえば、私のプロジェクトの1つでは、それは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:.+:.:.+:.:.+$
のようなパターンを使用して解決しました。コロンの間の正確な桁数を指定できますが、そうなる可能性は低いですneedto。
(私は最終的に groups を使用してプロセス全体を単純化することになりました。)
したがって、あなたの場合、次のいずれかを使用します。
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