AutoHotKey_Lで、引数を動作中のソフトに渡すツール作った。ver.2.1.0

 S2WAは、あらかじめAppListを用意しておき、リスト内のソフトが起動済みならそのソフトに、そうでなければリストの一番上のソフトに、自身が受け取った引数を丸投げするツール。
 例えばいくつかのブラウザを使い分けている環境で、HTTPなどをS2WAに関連付けておけば、リンクを踏んだ時起動済みのブラウザで開かれるため、無駄にブラウザを起動せずに済む。

 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の記事参照。


[PR]
by lordnoesis | 2013-06-20 17:57 | Trackback | Comments(0)

AutoHotKey_Lで、関連付けを動作中のアプリケーションで開くツール作った。

 動作中のプロセスからリストにあるものを探し出して引数(コマンドラインオプション)を転送するS2WAを、改めてAHKで作り直してみた。
 これによってリストがUnicodeになり、また、250文字を超える引数に対応した。

; ////////////////////////////////////////////////////////////////////////////////
;
; S2WA.ahk ver.2.0.0
;
; ////////////////////////////////////////////////////////////////////////////////

  FileEncoding, CP1200

  IfNotExist, %A_ScriptDir%\AppList.txt
  {
    MsgBox, %A_ScriptDir%\AppList.txt が存在しません!
    ExitApp
  }

  for process in ComObjGet("winmgmts:").ExecQuery("Select * from Win32_Process")
    ProcessList := ProcessList "`n" process.ExecutablePath

  TrgExe := ""
  Loop, Read, %A_ScriptDir%\AppList.txt
  {
    if ("" == A_LoopReadLine)
      continue
    StringLower, SearchExe, A_LoopReadLine
    Loop, Parse, ProcessList, `n, `r" "
    {
      StringLower, TipProcess, A_LoopField
      if (SearchExe == TipProcess) {
        TrgExe := TipProcess
        break
      }
    }
    if ("" != TrgExe)
      break
  }

  If ("" == TrgExe)
    FileReadLine, TrgExe, %A_ScriptDir%\AppList.txt, 1

  Loop, %0%
  {
    CmdlineBuf := %A_Index%
    Run, %TrgExe% "%CmdlineBuf%"
    Sleep, 1000
  }

 これをAhk2ExeでExe化し、関連付けすれば便利。例えば.htmlやHTTPに関連付け、リストにブラウザを列挙することで、起動済みのブラウザや、軽量なブラウザで開けるようになる。例えばっていうか、それしか思いつかないので、他に便利な使い道があったら教えてください(お。

 なお、Windows7でHTTPなどのプロトコルを関連付けするにはレジストリをいじる必要がある。

Windows Vista 既定のプログラム 関連付け レジストリ とかの話



REGファイルはじめました。
[PR]
by lordnoesis | 2012-06-09 19:19 | テクノロジ | Trackback | Comments(0)

関連付けを、動作中のアプリケーションで開くツール作った。

 私は複数のブラウザを使い分けててですね。最近は、web閲覧はOpera、2ch専ブラFx、関連付けはDonutLってところか。Chromeは起動速度が微妙になってきたのと、これまで担当していたフィードリーダー用途も、Operaの高速化によってGoogleリーダーでよくね?となったことから二軍落ち。あと近年、Donut系の軽さ(速度ではない)を再評価しつつあったり。

 それぞれ得意な分野を任せた配置なのだけど、ブラウザ起動していない時ならともかく、すでに他のブラウザが起動しているのなら、関連付けはそのブラウザで開いた方がリソース的にいいよなーと思い至って。で、作ったのがこのツール。

LORD PLAIN:Software>s2wa

 詳しく説明すると、パスを引数にしてこのツールを呼び出すと、現在動作中のプロセスと、あらかじめ登録しておいたリストを照合して、適合したアプリケーションを引数つけて呼び出すという。
 ブラウザ登録して、HTMLやインターネットショートカット、URL:HTTPあたりに関連付けるとすっげー便利。もうこれでIMなんかでURL送られてきた時に、考えなしにクリックしてブラウザの起動処理やマスターパスワード入力に煩わされることはないね!
 なお、ひとつもHITしない場合はリスト最上位のアプリケーションを呼び出すので、起動が早くて手間がかからないのを1位にしておくとよい(私の場合Donut)。

 s2waは同じディレクトリのリストを読み込むだけなので、もし複数のファイルタイプで使いたいのなら、s2waのディレクトリを複数用意する必要がある。
 リスト登録はブラウザに限定されてないけども、ブラウザ以外に「ひとつの拡張子に対応した複数のアプリケーション(どれもほぼ違いはない)が存在する」状況ってないよなー。しいていうならビューアー系か。


[PR]
by lordnoesis | 2011-01-03 06:37 | テクノロジ | Trackback(1) | Comments(0)
ブログトップ | ファンになる