web-dev-qa-db-ja.com

AutoHotKeyでIfWinActiveキーワードを使用する

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の開発者に向けた方がよいと思いますが、ここで期待しています。

8
tchakravarty

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
9
Synetech