AutoHotKey_Lで、引数を動作中のソフトに渡すツール作った。ver.2.1.0
S2WAは、あらかじめAppListを用意しておき、リスト内のソフトが起動済みならそのソフトに、そうでなければリストの一番上のソフトに、自身が受け取った引数を丸投げするツール。
例えばいくつかのブラウザを使い分けている環境で、HTTPなどをS2WAに関連付けておけば、リンクを踏んだ時起動済みのブラウザで開かれるため、無駄にブラウザを起動せずに済む。
ブラウザならBrokenURLが高機能。
ver.2.1.0では、OperaNext15が妙なディレクトリ構成なので、それに対応すべくAppListで正規表現を使えるようにした。
; ////////////////////////////////////////////////////////////////////////////////
;
; S2WA.ahk ver.2.1.0
;
; ////////////////////////////////////////////////////////////////////////////////
FileEncoding, CP1200
IfNotExist, %A_ScriptDir%\AppList.txt
{
MsgBox, %A_ScriptDir%\AppList.txt が存在しません!
ExitApp
}
for process in ComObjGet("winmgmts:").ExecQuery("Select * from Win32_Process")
if process.ExecutablePath
ProcessList .= process.ExecutablePath "`n"
TrgExe := ""
Loop, Read, %A_ScriptDir%\AppList.txt
{
if !A_LoopReadLine
continue
StringLeft, CharBuf, A_LoopReadLine, 1
if ("*" == CharBuf)
StringTrimLeft, SearchExe, A_LoopReadLine, 1
else {
StringReplace, SearchExe, A_LoopReadLine, \, \\, All
StringReplace, SearchExe, SearchExe, ., \., All
StringReplace, SearchExe, SearchExe, [, \[, All
StringReplace, SearchExe, SearchExe, ], \], All
StringReplace, SearchExe, SearchExe, +, \+, All
StringReplace, SearchExe, SearchExe, {, \{, All
StringReplace, SearchExe, SearchExe, }, \}, All
StringReplace, SearchExe, SearchExe, ^, \^, All
StringReplace, SearchExe, SearchExe, $, \$, All
StringReplace, SearchExe, SearchExe, (, \(, All
StringReplace, SearchExe, SearchExe, ), \), All
}
if RegExMatch(ProcessList, "im`n)^(" SearchExe ")$", $) {
MsgBox, %$1%
TrgExe := $1
break
}
}
If !TrgExe
FileReadLine, TrgExe, %A_ScriptDir%\AppList.txt, 1
Loop, %0%
{
CmdlineBuf := %A_Index%
Run, %TrgExe% "%CmdlineBuf%"
Sleep, 1000
}
使用するには、スクリプトと同じディレクトリにAppList.txtを用意し、S2WAを呼び出すだけ。S2WAはAppListを上から順に起動済みプロセスと照合し、いずれもHitしなければ一番上のソフトを起動する。
AppListの仕様は以下の通り。
- 文字コードはUnicode(UTF-16LE)。
- 1行につきひとつのフルパス。
- 行が*から始まった場合、その行は正規表現とみなされる。
ただし、1行目は正規表現であってはならない。OperaNext15を最優先にしたいなら、以下のように記述する。
R:\Opera Next\launcher.exe
*R:\\Opera Next\\.*\\opera\.exe
WindowsVista以降、httpなどのプロトコルへの関連付けは面倒になっている。詳しくはver.2.0.0の記事参照。