AutoHotkeyのすゝめ

1. はじめに

こんにちは、P班2回生のkairiです!
今回はWindows用スクリプト言語、AutoHotkeyを紹介したいと思います。
MacやLinaxには対応していませんが、非常に簡単に作業の効率化ができるスクリプト言語なので、Windowsユーザーの方ならP班以外でもぜひ読んでみてください!

2. AutoHotkeyって何よ?

AutoHotkeyはWindowsで動作する、その名の通りホットキーなどの低レベル制御の常駐ソフトの作成に特化したスクリプト言語です。
公式ドキュメント曰く、パワフルでイージーなアルティメット自動化スクリプト言語です。
元々はCtrl+cのようなホットキーを作成することを目的に作られた言語で、入力制御周りが非常に簡単に書けます。

3. できること

AutoHotkeyは具体的には次のようなことができます。

3.1 ホットキー割り当て

  • キーやマウスなどからの入力でマクロなどを実行できる。具体的には入力からのイベント発火が超簡単に書ける。
  • ホットキーに割り当てたキーはフックされ、本来の動作を防ぐ。貫通させることもできる。

3.2 キーボードやマウスなどのボタンのリマップ

  • 入力のリマップ(入れ替え)はもっと簡単に書ける。a::bで「aを押すとbが押されたことになる」。

3.3 操作自動化

  • キーボード、マウスなどの入力を送信できる。
  • ウィンドウを動かしたり大きさを変えたり消したり全面に固定したり色々できる。

3.4 常駐機能

  • 右下のタスクバー(トレイ)に常駐できる。
  • アイコンの動作は好きにできる。
  • バルーン通知(だったトースト通知)を送れる。
  • チップ通知を送れる。

3.5 GUI実装

  • Windowsフォームをガッツリ使える。
  • ウィンドウを持ったGUIアプリにしたり、右クリックメニューだけ実装したりもできる。

3.6 プログラム実行、プロセス操作

  • 外部プログラムを実行できる。
  • 他プロセスを弄れる。

3.7 ファイル操作

3.8 クリップボード処理

3.9 レジストリ操作

3.10 DLL呼び出し

ぶっちゃけWindows上の操作なら大抵のことは実現可能ですね。
特に入力と出力関連は簡単に書けるようになってます。

例1: Win+cでコマンドプロンプトを起動

#c::
Run, cmd, %HOMEDRIVE%%HOMEPATH%,, PID
WinActivate, ahk_pid %PID%
Return

例2: GoogleChromeでマウスの左クリックを押しながら右クリックするとページを更新

#IfWinActive, ahk_exe chrome.exe
~LButton & RButton::
Send, {F5}
Return
#IfWinActive

4. AutoHotkeyのここがクソ

AutoHotkeyは非常に便利な言語ですがかなりクセがある言語でもあります。
というわけでAutoHotkeyを使う上では次のような点に注意(覚悟)する必要があります。

4.1 言語仕様がカオス

元々ホットキーを登録するための言語だったのを魔改造していった言語なので言語仕様がカオスでキメラです。特にコマンドの引数は変数を展開しないけど関数の引数は勝手に展開されるとかアホかって感じです。気をつけましょう。

4.2 すり抜けが起こる場合がある

キーバインドはたまにすり抜けることがあるらしいです。まあ普通に使う分には別に気になりませんが高速で大量に入力すると起こるのかもしれません。

4.3 日本語Wikiが遺跡

日本語wikiは5年以上更新が止まっています。といっても基本は変わらないので、大変参考になります。ただし新しい機能や細かい仕様は原文ドキュメントを見に行くことを推奨します。また5chに専用版があるので覗いてみてもいいと思います。

4.4 使い慣れると他のPC使うのがストレスになる

EXEにして持ち歩くくらいしかないですね。

5. インストール方法

インストーラが公式ページからダウンロードできます。
なんか3個くらい出てきますけど普通にCurrentVersionでいいと思います。

インストールオプションはバージョンはUnicodeで、オプションは全部載せでいいと思います。
‘Separete taskbar buttons’はちょっと分かりづらいですが、タスクバー(タスクトレイ)への常駐をスクリプト毎に分けるか一つにまとめるかってヤツです。個人的には分けたほうが管理しやすくていいと思います。
ちなみにこのインストーラもAutoHotkeyで書かれてるみたいですね。

6. 使い方

ここで全部説明するのは無理なんでwikiドキュメントを読んでください……と丸投げするのもいいのですが簡単に解説したいと思います。あくまで概要なので興味がでたら英語アレルギーがなければ公式チュートリアル、あるならwikiのリファレンスを読んでください。

6.1 スクリプトファイルについて

テキスト形式のスクリプトをAutoHotkeyで実行できます。インストールされた環境なら.ahkが関連付けられてるのでダブルクリックでOKです。編集はテキストエディタです。
テキストハイライトはサクラエディタやNotepad++のものはググれば見つかりますし、VSCCodeなら拡張機能で簡単に導入できます。みんなもVSCodeを使おう!(唐突な宗教勧誘)
ちなみにコマンドなどでは大文字小文字は区別されません。

6.2 Hello, World!

メッセージボックスでHello, World!してみましょう。次のスクリプトを書いて実行します。

msgbox, Hello`, World!

「`」はエスケープ文字です。実はこの場合カンマのエスケープをする必要はないのですが詳しくはwikiなどを見てください。

6.3 ホットキー

ホットキー登録は「(修飾キー)(キー)::」でできます。CtrlやAltなどの修飾キーは記号で表されます。
次のサンプルは、「Ctrl+jでHello, World!と入力する」スクリプトです。メモ帳などで入力カーソルを出した状態で押してみてください。

^j::
Send, Hello`, World{!}
Return

Sendでキーを送信します。!は特殊文字扱いなので{}で囲みます。SpaceやEnterも囲まないと普通に”Space”などと文字で入力されます。
注意すべき点は、ホットキー部分は{}で囲む必要はない点です。+Space::だったら普通にShift+Spaceになります。
また修飾キーと記号の対応は次のとおりです。

keysymbol
Ctrl^
Alt!
Shift+
Win#

また「~」で入力を貫通、「&」で修飾キー以外との組み合わせになります。

きりがなくなるので紹介はこのへんで……
制御構文や関数、オブジェクトもあるので残りはwikiなどを読んでください。

7. おわりに

いかがでしたか?何分この手の記事を書くのは初めてなので読みづらかったとは思いますが、少しでもAutoHotkeyに興味を持っていただけたら幸いです。
使いこなせれば作業効率やPCの使い心地が上がるのは間違いないので、ぜひ使ってみてください!

コメント

タイトルとURLをコピーしました