昨日のつづき。
インデックスファイルいらない版を書いてみました。「手を抜く」という意味では、このほうがスマート。スクリプト的にもちょっとスッキリ。
#x:: b_folder = c:\shortcut b_default = %b_folder%\00default.txt WinGetActiveTitle, soft_title Loop, %b_folder%\*.txt { b_file = %A_LoopFileLongPath% SplitPath, b_file,,,, soft_name IfInString, soft_title, %soft_name% { Run, %b_file% return } } MsgBox, このソフトのショートカット一覧は用意されていません。 IfExist, %b_default% { Run, %b_default% } return
インデックスファイルをつくる必要はなくなりましたが、そのためショートカット一覧ファイルを探す優先度が指定できません。アルファベット順に一覧ファイルを探しますので、アルファベット順で早めに出てくるもののほうが当然マッチしやすくなります。指定するソフト名が短ければ余計なときにも一致してしまう場合がありえます。
というわけで、こちらを使う場合には、意図しないマッチングを避けるために、次のような細工をしたほうがいいでしょう。一、デフォルトファイルを「00.txt」から「00default.txt」に変更する。二、ソフトの名前(=一覧ファイル名)を長めに指定する。たとえば、「xyzzy.txt」ではなくて「xyzzy 0.2.txt」みたいな。そのソフトを使っているあいだタイトルバーに出ている文字の中で、変わらない部分を長めにとって指定するといいです。
このxyzzyの例だと、バージョン文字列を一部含めてますが、これを「0.2.2.235」まで完全に含めてしまわないのは、そこまでの必要がなさそうなことと、バージョンが上がったときにファイル名を付けなおすのが面倒くさいからです。手が抜けそうなところはできるかぎり手を抜く。基本です。
少し汎用的な書き方に変えてみました。要するにこのスクリプトは、現在使用しているソフトに応じてテキストファイルを表示する、というものなので、用途をショートカット一覧表示に限定する必要もないし、そもそもテキストファイルの表示にすら限らなくてもいいわけです。
変数が「b_○○」という名前なのは、AutoHotkeyの予約している変数名が「A_○○」であることをマネたもの。このパターンは後々役に立つかなあ、と思いつつ、メモということで。
(※)ショートカット一覧ファイルを用意してないソフトで呼び出したときに、毎回「このソフトの〜」と言われるのがうざければ、そのメッセージを表示している行をコメントアウトしちゃってください。行の頭にセミコロン一個入れるだけで黙ります。