ホットキーは「::
」(コロン2つ)を伴ったサブルーチンラベルとして記述される。
ホットキーが入力されると、gosubsコマンドが実行されたときと同様に、当該ラベルの次の行に処理が移り、最初にreturnかexitが実行されるまでが処理される。
#y:: WinActivate, Untitled - Notepad return
ホットキーに割り当てる動作が1コマンドだけなら、「::」(コロン2つ)の直後にコマンドを記述することで、1行で済ませられる。returnは不要。
#y::WinActivate, Untitled - Notepad
(備考) プログラムは擬似マルチスレッドになっている。
ホットキーイベントの実行途中に、他のホットキーイベントが実行されることも可能。
以下の記号で修飾キーなどを指定できる。
複数のシンボルを同時に指定するときは、「!+」のように間に何も開けずに連続して記述する。
+ | Shift |
^ | Control |
! | Alt |
# | Win (ミ田) |
< | 左のモディファイアキーを使用(NT系専用) 例: <!a:: 左Alt+A
|
> | 右のモディファイアキーを使用(NT系専用) 例: >+<^a:: 左Ctrl+右Shift+A
|
<^>! | AltGr(一部の国のキーボードレイアウトに存在) |
* | 任意の修飾キーを表すワイルドカード(NT系専用) 例1: *a:: Ctrl/Alt/Shift/Winの状態にかかわらず、Aキーが押されたら発動例2: *+a:: Ctrl/Alt/Winの状態にかかわらず、Shiftキーが押された状態でAキーが押されたら発動 |
~ | イベントを乗っ取らず、そのままシステムに通す。(NT系専用) 例: ~*a::SoundPlay,D:\AutoHotkey\typesound.wav Aキーが押されたときにサウンドを鳴らす。(備考)Alt+Tab代替系コマンドが割り当てられた場合、この指定に関係なく入力は乗っ取られる。 |
$ | RegisterHotkey()ではなく、強制的にキーボードフックでイベントを取得する。(NT系専用) サブルーチン内でそのホットキー自身を送信する場合、RegisterHotkey()ではホットキーイベントが再帰的に呼び出されてしまう。 #UseHook 指令を使えば、$を省略できる。
|
使用できるキー名については、Key Listを参照
ホットキーラベルは通常のラベルのようにGosubやGotoで移動することもできる。
また、下例のように、複数のホットキーに同じサブルーチンを割り当てることも可能。
~*a:: ~*b:: ~*c:: SoundPlay,D:\AutoHotkey\typesound.wav return
動作としてreturn文だけを割り当てると、キーを無効化することも出来る。
RWIN::return
ホットキーをスクリプトの実行中に登録したり無効化/有効化したりするには、Hotkeyコマンドを使用する。
キー名の後に半角スペースに続いて「Up」とつけると、キーを放したときに発動するホットキーを設定できる。(例:「a up」「LShift up」)
Upなしのホットキーと共に設定することも可能。
Upなしのホットキーを設定していない場合でも、押し下げイベントは乗っ取られる。
たとえば、「a up::Send b」とすると、Aキーを押し下げたときには何も起こらなくなる。
「~a::return」を共に設定しておくと、Aキーが押し下げられたときには普通にAキーが押されたときの動作をするようになる。
押し上げイベントは、「~」の有無にかかわらず、乗っ取られずにシステムに通知される。
たとえば、「LShift Up::return」のようにしても、LShiftキーを離せなくすることはできない。
「&
」を使うことで、2つの任意のキー(ジョイスティック以外)の組み合わせをホットキーに指定することが可能。
3つ以上のキーを指定したり、+^!#
で修飾キーを追加したりは出来ない。
一つ目に指定したキーが修飾キーとなり、一つ目のキーを押しながら二つ目のキーを押すと発動する。
一つ目のキーを押して、ホットキーを発動させずに離すと、一つ目のキー単独に割り当てられたサブルーチンが実行される。
一つ目のキー自体のもともとの機能は無効化される。
Numpad0 & Numpad1::AltTab Numpad0 & Numpad2::ShiftAltTab Numpad0::Run, calc.exe
一つ目のキーにチルダ(~)をつければ、そのキーは無効化されず、普通に入力される。
一つにつけておけば、一つ目のキーが同じほかのホットキーでは指定されていなくても、そのキーは無効化されなくなる。
~RButton & LButton::MsgBox,右クリックしながら左クリックした RButton & WheelUp::MsgBox,右クリックしながらホイールを上に回した
上記例では、右クリックしながら左クリックしたり、ホイールを上に回したりするとメッセージが出るが、右クリックは普通にアクティブウィンドウに送られる
これらのコマンドは、ホットキーに直接割り当てることのみ可能な特別なコマンド。
普通に「Send,!{Tab}
」とすると、サブルーチンが終わるごとにAlt+Tabの画面が消えてしまい、まともに動作しないが、AltTab/ShiftAltTabを割り当てると、修飾キーを離すまで画面が消えなくなる。
また、AltTabMenu
を使うと、Alt+Tab画面の表示の有無を切り替えられる。
AltTabAndMenuで強制的に表示、AltTabMenuDismissで表示されていたら消去という動作も割り当てられる。
また、Escキーが押されると、選択されたウィンドウに切り替えずに表示を終了することができる。
修飾キーのない単独キーにAltTab/ShiftAltTabを割り当てた場合、そのままでは何も起こらず、AltTabMenu
でAlt+Tabの画面を表示している間だけ、切り替え操作が割り当てられる。
なお、修飾キーは左右どちらかを指定しなければならない。「<+a
」のように修飾シンボルを使うか、「LShift & a
」のようにコンビネーションキーで指定する。
LAlt & WheelDown::AltTab LAlt & WheelUp::ShiftAltTab
Alt+ホイールでウィンドウ切り替え
MButton::AltTabMenu WheelDown::AltTab WheelUp::ShiftAltTab
中央クリックで切り替え画面を表示し、ホイールで選択、再び中央クリックすると切り替え画面が消えて切替が実行される。
SetNumlockStateなどのコマンドで、NumLockキーなどのON/OFFの状態を固定することができる。
SetNumlockState, AlwaysOn
Win+EやWin+RなどのWindows標準ホットキーも動作を上書きしたり無効化したり出来る。
詳細はoverride page参照
テンキーの各キーはNumLockの状態によって2通りのホットキーを割り当てられる。
NumLockの状態にかかわらず1つの動作を割り当てたい場合は、次のようにする。
NumpadEnd:: Numpad1:: MsgBox, This hotkey is launched regardless of whether Numlock is on. return
Inputコマンドで一連のキーストロークを受け取ることで、2ストロークキーや短縮入力などの機能を実現できる。
^c:: Input,InputChar,C I L1 T2,{Esc},x,s if ErrorLevel=Match { if InputChar=x Send,!{F4} if InputChar=s Send,^s } return