ホットキーは、アクションをトリガーするキーまたはキーの組み合わせです。例えば、Win+Eは、通常ファイルエクスプローラーを起動し、F1はアプリ固有のヘルプ機能を起動することが多い。AutoHotkeyは、どこでも使えるホットキー、または、特定のアプリ内だけで使えるホットキーを定義し、コードで表現できるあらゆるアクションを実行することができる機能を備えています。
ホットキーを定義する最も一般的な方法は、ホットキー名の後にダブルコロン、そしてアクションを記述することです:
#n::Run "notepad"
この例では、Win+Nを押すたびにメモ帳を実行するホットキーを定義しています。試す方法は、「サンプルコードを実行する方法」をご覧ください。
プログラムの実行については、「プログラムを実行する方法」をご覧ください。
複数行が必要な場合は、中括弧を使ってホットキーの動作の開始と終了をマークしてください。これをブロックと呼びます。
#n:: { if WinExist("ahk_class Notepad") WinActivate ; 上記のウィンドウをアクティブにします。 else Run "notepad" ; メモ帳の新規ウィンドウを開く }
また、冒頭のブレースは、ホットキーと同じ行に、::
の後に書くことができます。
ダブルコロンホットキーに続くブロックは暗黙のうちに関数本体となりますが、これは独自の変数を定義する場合にのみ重要です。とりあえず、ブロックは複数の行を1つのアクションやステートメントとしてまとめるために使われるということだけは知っておいてください(このことについて詳しく知りたい方は、「コントロールフロー」を参照してください)。
ほとんどのホットキーでは、ホットキー名は、オプションの修飾記号の直後に1つの文字または記号が続くか、またはキー名で構成されています。上の例で、次のように変更してみてください:
#
を削除するとNを単独で押したときにホットキーが有効になります。何か問題が発生した場合は、いつでもスクリプトを終了できることを念頭に置いておいてください。#
を、Ctrlの^
、Altの!
、Shiftの+
に置き換えたり、組み合わせを試したりしてください。#
を<^
に置き換えると、左Ctrlキーが押されたときだけ有効になり、>^
に置き換えると右Ctrlキーが押されたときだけ有効になり、両方のCtrlキーが必要なときは両方となります。n
を他の文字や記号(:
を除く)に置き換えてください。n
を キーリストの任意の名前に置き換えてください。注:::
の前の最後の文字は、修飾記号として解釈されることはありません。
この形式のホットキーでは、組み合わせの最後のキーだけを1文字で書いたり、その名前をフルスペルで書いたりすることができます。事例:
#::
は、ハッシュキー又はその記号に関連する組み合わせで起動するホットキーを作成することができます。(USレイアウトでは Shift+3)。##::
は、上記のようなホットキーを作成しますが、Windowsキーも保持している場合にのみ有効です。LWin::
は、他の修飾キーを使わずに、左のWindowsキーを押し下げることで起動するホットキーを作成します。一般的な修飾語は、Ctrl(^
)、Alt(!
)、Shift(+
)、Win(#
)です。
記号<
と>
は、上記の4つの修飾子のいずれかに接頭して、そのキーの左または右のバリアントを指定することができます。修飾子の組み合わせ<^>!
は、オペレーティングシステムが LCtrl と RAlt の組み合わせとして実装しているため、AltGr キー(キーボードレイアウトに存在する場合)に対応します。
その他のモディファイアは:
*
(ワイルドカード)により、ホットキーに記号が含まれていない修飾キーを押していても、ホットキーが発火するようになります。~
(no-suppress)は、ホットキーがそのキーのネイティブ機能をブロックするのを防ぎます。$
(use hook)は、キー送信時の意図しないループを防止し、場合によってはホットキーの信頼性を高めることができます。押したときではなく、離したときにのみホットキーを起動させる場合は、UP 接尾辞にします。
#HotIfディレクティブは、以下のように、ホットキーが有効になるために満たすべき条件を指定するために使用することができます:
事例:
#HotIf WinActive("ahk_class Notepad") ^a::MsgBox "You pressed Ctrl-A while Notepad is active. Pressing Ctrl-A in any other window will pass the Ctrl-A keystroke to that window." #c::MsgBox "You pressed Win-C while Notepad is active." #HotIf #c::MsgBox "You pressed Win-C while any window except Notepad is active."
ホットキーを押すたびに評価される式を書くことで、条件を定義することができます。式がtrueと評価された場合、そのホットキーの動作が実行されます。
ホットキーが出現するたびに、またはホットキーのバリエーションごとに異なる条件を指定することで、同じホットキーを複数回使用することができます。ホットキーを押すと、プログラムは条件が満たされた最初のホットキーバリアント、または条件のないもの(上の例では最後の#c::
など)を実行します。
ホットキーの条件が満たされず、ホットキーの無条件変形がない場合、ホットキーがそもそも定義されていないかのように、キー入力はアクティブウィンドウに引き継がれます。例えば、上記の例の実行中にメモ帳がアクティブでない場合、Ctrl+Aは通常の機能(おそらく「すべて選択」)を実行します。
例題に次のような変更を加えてみてください:
WinActive
を WinExist
に置き換えて、メモ帳が起動していれば、メモ帳にフォーカスがなくても、ホットキーが有効になるようにしました。GetKeyState("CapsLock", "T")
に置き換え、CapsLockがオンになっている間だけホットキーが有効になるようにします。ホットキーで操作するウィンドウを正しく特定するためには、ウィンドウのタイトル以外の基準で判断する必要がある場合があります。詳しくは、「Windowsを管理する方法」をご覧ください。
関連:#HotIf、Expressions、WinActive
カスタムコンビネーションとは、通常は組み合わせて使用することを想定していない2つのキーを組み合わせたホットキーのことです。例えば、Numpad0 & Numpad1::
は、Numpad0を押しながらNumpad1を押したときに起動するホットキーを定義しています。
カスタムコンビネーションでキーをプレフィックスとして使用する場合、AutoHotkeyは、修飾キーとしての使用の妨げになるため、キーの通常の機能を有効にしたくないと仮定しています。キーの正常な機能を回復させるには、2つの方法があります:
Numpad0::Send "{Numpad0}"
など、別のホットキーを使って、キー本来の機能を再現します。デフォルトでは、Numpad0を離したときに、Numpad0とNumpad1を組み合わせて押さなかった場合にのみ、ホットキーが有効になります。~Numpad0 & Numpad1::
のように、組み合わせの前にチルダ(~)を付けます。ただし、Numpad0::
も定義している場合は、チルダによって、Numpad0を離したときではなく、後者のホットキーがすぐに有効になるようにします。注:カスタムの組み合わせは、ちょうど2つのキー/マウスボタンの組み合わせにのみ対応しており、Alt、Win、Ctrl、Shiftのための!#^+
など、他の修飾子との組み合わせはできない。
AutoHotkeyは2つ以上のキーのカスタムコンビネーションに直接対応していませんが、#HotIfを使用することで同様の最終結果を得ることができます。以下の例を実行すると、Ctrl+CapsLock+SpaceまたはCtrl+Space+CapsLockを押すと、メッセージが表示されるはずです:
#HotIf GetKeyState("Ctrl") Space & CapsLock:: CapsLock & Space::MsgBox "Success!"
この例では、最初にCtrlを押すことが必要です。これは、Ctrlを押していなければ、スペースとCapsLockが通常の機能を果たすという利点があります。
関連: カスタムコンビネーション
AutoHotkeyのホットキーには、他にもいくつかの機能があります。ほとんどのアプリケーションは、Ctrl、Alt、Shift、場合によってはWinと他の1つのキーの組み合わせに限定されていますが(キーボードのすべてのキーに対応していないことも多い)、AutoHotkeyはそれほど限定されてはいません。詳しくは、「ホットキー」をご覧ください。