日頃Windowsを使っていると、「なんでこのショートカットキーはこんなに不便なんだろう」「なんでもっと簡単にこの一連の操作ができないんだろう」ということが頻繁にある。例えば自分がMacに移行して感動したことの一つは「Cmd+Q」でアプリを終了したり「Cmd+W」でウインドウを閉じたりするのが簡単に、しかもアプリ間で統一性を持ってできることだった。誰が「Alt+F4」なんて指がつりそうなショートカットを頻繁に入力しなければいけないのか。

なので、Windowsで、「キーストロークやマウスクリックなどのイベントやメッセージを全部キャプチャ(フック)して、それに応じて自分で好きなイベントやメッセージを割り当てられるような、願わくばフックを何かの簡易言語で書けるようなカスタマイズツールがあったらなぁ」と悶々と考えてて半分自分で作ろうかとも考えてたのだけど、

まさにそういうツールが既にあったのを発見。

http://www.autohotkey.com/
AutoHotkey - Free Mouse and Keyboard Macro Program with Hotkeys and AutoText

細かい説明、使い方、サンプルなどは全部この

AutoHotkeyを流行らせるページ
http://lukewarm.s101.xrea.com/

に書いてあるので割愛。基本的には、「a::b」というペアをずらずらと並べ、「a」キーが押されたときに「b」という処理を行うというスクリプトを書く。この「b」という処理のところに独自言語で実に色んな処理が書ける。例えば、自分が今愛用しているスクリプト片は例えば

#f::
Process,Exist,firefox.exe
if ErrorLevel<>0
  WinActivate,ahk_pid %ErrorLevel%
else
  Run,C:Program FilesMozilla Firefoxfirefox.exe

こういうもので、「Win+F」が押された時に、Firefoxが既に起動してればそのウインドウにフォーカスを合わせ、起動してなければ起動するというもの。これでたくさんウインドウを開いているときにイチイチ「Alt+Tab」で目標のウインドウを探さなくて済むし、起動していないときも一瞬で開ける(もちろん、これまでもLaunchyを使ってたので大して起動の手間はかからないわけだけど)。自分はこのスクリプト片を他にもファイラやエディタなど頻繁に使うアプリにも書いてて、そのおかげで使い始めて3日ほど経ったけど「Alt+Tab」を使う頻度が劇的に減ってしまってとても快適。

ついでに「Win+Q」をこれまでの「Alt+F4」の代わりに使えるようにしたので、アプリを終了する(正確に言うと、「ウインドウを閉じる」だけど、Windowsではこの2つはほぼ同義)ときもMacOS Xのノリでできる。ちなみに、このAutoHotKeyを使わなくても、ウインドウを閉じるのは「Alt+Space」でコンテキストメニューを出してから「C」を押せば良い。この一連のストロークはキーどうしが近いので慣れれば一瞬でできるようになってとても便利なのだけど、これまでリアルで知ってる人に出会ったことがない。逆に、情報系の学生なのに「Alt+Tab」を知らない人は何人か出会ったことがある。

欲を言えば、このAutoHotKeyで使われているスクリプト言語があまり好きになれない。自分がまだ仕様の全貌を知らないせいかもしれないけど、バージョンアップと共に言語仕様を継ぎ足していったようなお世辞にも美しいとは言えない文法+仕様で、これを中で全部場合分けしてパースしているのかと思うとご苦労様という感じ。なので、このスクリプト部分をもっと身近なPerl、Python、Ruby、JavaScriptのサブセットで綺麗に書けるツールがあったらもっとヒットすると思う。誰か(変態な人)がAutoHotKey上で動くLLのインタプリタを書けば良いのだけど、それならベースのエンジンから作り直したほうが早い。できる限りプログラム初心者にも分かるようにしたかったのだろうけど、それならいっそのことS式で書かせてくれたほうが自分にはやりやすかったな。

この手のハック、これまでにも同じことを思い立ってPowerProを使っていた時期があったのだけど、全部GUIベース(+ヘンテコなスクリプト)で設定するのでうんざりしていた。あと、GUIベースの設定は違うマシン間での共有が面倒くさいが、AutoHotKeyみたいにスクリプトで全部見えればそのファイルをコピーしたりするだけで良いので精神健康上も良いとおもう。

ちなみにこのAutoHotKey、Windows上の入力イベント(キーボード、マウス、ジョイスティック)を全てキャプチャできるので、少しスクリプトを書くだけでそのままキーロガーが作れる。というかもう作った。色々と探してみたのだけど、Windows上で使い勝手が良くフリーのキーロガーというのはなかなか見つからない(そりゃそうだ、誰が必要とするのだろう。)このキーロガーは前に

キーロガーを使って集中力を「監視」する … 集中力アップのためのツール案(記録編)
http://blog.lilyx.net/2007/10/21/concentration-by-keylogger/

キーロガーを使って集中力を「監視」する … 集中力アップのためのツール案(解析編
http://blog.lilyx.net/2007/10/27/keylogger-analysis/

という記事で書いた通り、とても面白い使い方ができる。それについてはまた後日別記事で書くことに。