覚えられませんっ

元「覚えらんない人のためのオンラインソフト備忘録」。遅ればせながらブログ移行してみた次第。

馬鹿は馬鹿なりのAutoHotKey-その1

前回思わず「ライト感覚」なんて言葉を出してしまって加齢臭を漂わせている俺であるが、気を取り直してAutoHotKeyだ。こいつは名前の通りホットキーソフトとして使えるだけでなく、マウスジェスチャーも割り当てられるしキーの入れ替えや無効化もできるしスクリプトによる操作の自動化もできるしでスキルさえあれば相当万能、使う人が使えば嵐を呼び雷鳴がとどろき天地鳴動しゲイツ氏も裸足で逃げ出そうかというほど強力なソフトである。
俺はこのソフト、2004年の秋頃に一度試してみた。流行らせるページ跡地などで設定例を見つつやってみたんだが、俺程度の使い方であれば何もこんなめんどくせえソフト使わなくってもいいんじゃね?と思ってあきらめた。でまあ、今回リトライしてみたのだが、様々なサイトさんを参考にさせていただき、ようやく自分なりの使い方が見えてきた。で、わかった。このソフト、少なくとも俺程度の軽い使い方なら、めんどくさくない。
思うにこのソフトについての話題は比較的ハイレベルになりがちである。スクリプトが書ければ相当高度な処理が可能なソフトだから当然のことだ。その結果Autohotkeyでぐぐったりしても「でフツーのホットキーソフトとして使うにはどうしたらいいのよ」とか「簡単なマウスジェスチャーはどうすりゃできるのよ」とかのライトユーザー的クエスチョンにはなかなかアンサーが見つかりにくいんですねって俺は長嶋か。でいきおい「めんどくさそうなソフト」「難しそうなソフト」という印象になってしまう。今回は覚えらんない人=俺が「ここまでならなんとか」と感じたところを記録することで、「むずかしそうだからやーめた」だった方の導入の一助になれば嬉しいのだが。

iniとahk

AutoHotKeyの動作定義ファイルは2種類ある。
ひとつはAutoHotkey.ini。AutoHotkeyを普通に起動すると、初回起動ではこのファイルを実行ファイルのあるフォルダに作成し、2回目以降はこのファイルを読み込んでここに記述されている動作を行う。このiniファイルは作業フォルダにそちらを指定すれば別の場所に作成することもできる。iniは主に常駐時のAutoHotkeyの動作を定義するためのもので、キー定義の変更、グローバルホットキー、マウスジェスチャーなどを定義しておく。これらはアプリケーションごとに設定可能なので、キーカスタマイズできないアプリケーションのキー定義を変更したり、特定のアプリケーションに特定のマウスジェスチャを与えたり、ということも可能。
もう一つは拡張子にahkを指定したファイル。こちらは主に単発のスクリプトを書くためのもので、ちょっとした処理の自動化はもちろん、さんや猫歩きさんが公開されているようなもはやアプリケーションと言っていいレベルのものも作成できる。通常のインストールではahkAutoHotkeyに関連付けされているので、このファイルを実行すれば記述された処理が始まる。
iniもahkもテキストファイルなので、メモ帳でも記述可能。AutoHotkeyをホットキーソフトとして使おうというなら、特にAutoHotkey.iniの方を記述しないと何も始まらない。「もうね、あたしゃなんか書くってだけでね、くわばらくわばら、ごめんなすって」ありゃ、出ていっちまったよ弱ったねどうも。こんな人にはさすがにこのソフトは無理だが、この書式はホットキーソフトとして使用するだけなら非常に簡単である。

AutoHotkey.iniを書く

初回起動時に作られたAutoHotkey.iniにいくつかのサンプルが載っているが、今回は俺自身のAutoHotkey.iniを晒しつつ書いていく。なぜならいつものようにこれは未来の何もかも忘れた俺自身のための記述だからだ。勝手で申し訳ないが。

Auto-executeセクション

iniの最初にはAuto-executeセクションをおく。ここは俺もよくわからんがAutoHotkeyの動作設定みたいなものを書く部分みたい。流行らせるページ跡地さんでは

スクリプトが読み込まれると、最初にReturnかExitあるいはホットキーラベルが現れるか、スクリプトの終わりに達するまでが実行される。この部分のことを、auto-executeセクションと呼ぶ。

と書かれている。

;Auto-executeセクション
SetKeyDelay, 20
SetTitleMatchMode, 2
return

俺の場合は今のところこれだけなんだが。;が先頭の行はコメント行。SetKeyDelayはキー送信の間隔をあけるために使うもので、一応定義しておいた方がいいみたい。SetTitleMatchMode, 2というのは、AutoHotkeyがウィンドウを識別するときに部分一致で識別できるようにするもの。エディタのようにウィンドウタイトルにファイル名が入る場合も「秀丸」だけで秀丸のウィンドウが扱えるようになる。returnは一連のコマンドの終了を表す。ここまででAuto-executeセクションは終わりですよ、ってこと。なお、この先頭に

#NoTrayIcon

の1行を入れておくと、AutoHotkeyのタスクトレイアイコンが非表示になる。慣れるまでは表示しておいた方がいいと思うけど。

アプリケーションの起動

単にホットキーでアプリケーションを起動したいだけなら記述は非常に簡単。

;Win+UPでcltc
#up::Run, C:\Bin\Env\cltc\cltc.exe

cltcは色々書くとこ(仮)さんで公開されているタスク切り替えソフト。インクリメンタルサーチでタスク切り替えが可能。今まで使ったタスク切り替えでは一番使いやすい印象。これをコメントのとおりWindowsキー+↑に割り当てている。#はWindowsキーを修飾キーとして指定している。+がShift、^でCtrl、!がAlt。組み合わせるときは!+みたいな感じで。Run,は外部アプリを起動するコマンドで、スペースをおいて実行ファイルのフルパス。オプションを示す特別な区切りなどは不要。

;Win+DOWNでqt0
#down::Run, C:\Bin\Env\qt\qt0.exe, C:\Bin\Env\qt\

作業フォルダを指定する場合は実行ファイルのあとにこんな感じで指定してやる。
複数のアプリを連続起動させたい場合は、

;Win+tでTTBase再起動
#t::
Run,C:\Bin\Launcher\TrayCommand\traycmd.exe /R /K=UE C:\Bin\Desktop\TTBase\TTBase.exe
Sleep, 300
Run,C:\Bin\Desktop\TTBase\TTBase.exe
Return

こんな感じ。複数のコマンドを列挙する場合は#t::のキー定義のあとで改行する必要がある。Sleepはいわゆるウェイト。コマンドを連続実行する場合は最後にreturnを入れる。なおqt0はタスクの強制終了、再起動などを可能にしてくれる非常に軽量のソフトでtraycmdはタスクトレイアイコンをコマンドラインから直接操作することを可能にしてくれるソフト。TTBaseは一言で説明するのが難しいのでまたの機会に触れたい。俺の設定が悪いのかqt0からTTBaseを再起動するとエクスプローラを巻き込んで落ちるので、TTBaseの再起動用コマンドをホットキーに組み込んでみた。

;下\でBlueWind、Ctrl+下\でCraftLaunch
vkE2sc073::Run,C:\Bin\Launcher\bluewind\bluewind.exe
^vkE2sc073::Run,C:\Bin\Launcher\CraftLaunch\clnch.exe /close

AutoHotkeyには最初からキー名が付いてないキーがあって、109日本語キーボードにおける下\もそうである。ここではvkE2sc073が下\のキーコードを表している。調べるには

タスクトレイアイコンをダブルクリックしてウィンドウを出し、メニューの「View」→「Key history」でキー履歴を表示する。ホットキーラベルに指定する場合、「vkYY」や「scXXX」(YYの部分は仮想キーコード、XXX部分はスキャンコード)と指定する。
Sendコマンドで送信する場合は、「vkYYscXXX」のように指定する。

流行らせるページ跡地さんから引用させてもらった。詳細はこちらに。これは実際に操作してみないとピンとこないと思う。

別のキーを送る
;Win+Leftで窓巡回、rightで逆順
#left::Send,!{Esc}
#Right::Send,!+{Esc}

Send, はキーを送るコマンド。ESCを{}で囲んでいるが、英数字や記号以外のキー名はこうする決まり。Windowsキー+←にAlt+Esc、→にAlt+Shift+Escを割り当てている。

ウィンドウを所定の位置に移動
;Ctrl+Alt+Wでウィンドウをあるべき位置に戻す
^!w::
  IfWinExist, ahk_class rctrl_notewnd32
  WinMove, 0,0
  IfWinExist, 2nd.
  WinMove, 1908,0
  return

IfWinExist, で指定のウィンドウが存在するかどうかを調べ、存在する場合にはWinMove, で指定の座標位置にウィンドウを移動。IfWinExist,以下にはウィンドウに表示されるテキストかウィンドウクラス(AutoHotkeyのタスクトレイアイコン右クリックから起動できるWindow Spyで調べられる)を入れる。ここではOutlookのメモが表示されている場合に画面隅に移動、またテキストに2ndを含むウィンドウが存在する場合は指定の座標に移動する。俺の場合はあふを多重起動させたときに、あとから起動したあふはウィンドウに2ndのテキストが入るため、2ndを含むウィンドウをキー一発でもとのあふと並べて表示できるようにしてある。なおSetTitleMatchMode, 2を指定してないとウィンドウテキストを部分一致で取得できないので注意。また、たとえば「秀丸」というテキストを含むウィンドウを指定した場合、当然「秀丸メール」も含まれてしまうため、可能であればウィンドウクラスによる指定を使った方がよいと思われる。

次回はマウスジェスチャーとか

AutoHotkeyの力はまだまだ全然こんなもんじゃないが、複数アプリの連続実行までできてしまうので、いちおうここまででも通常のホットキーソフト並の機能は与えられるのではなかろうか。ただ、初心者の方にひとつ注意。このソフトのキーボードフックは強力。マルチメディアキーボードの特殊キーまでもカスタマイズできるし、Windowsがあらかじめ機能を割り振っているキーも横取りしてしまう。定義しようとしているキーがもともと何に使われているのかあるいは使われていないか、そのへん確認してからカスタマイズしましょう。
次回はAutoHotkey.ini中のマウスジェスチャーの部分(俺はあまりマウスジェスチャを使わないしまたいつものとおり全然よくわかってないので期待しないでくださいね)とahkファイルに関して。AutoHotkeyのおかげでKIKIのダイレクトリクエストに確実に文字列が渡せるようになりましたよなんてことを書きます。