ホットキー

提供: AutoHotkey Wiki
移動: 案内検索

ホットキーは ::(コロン2つ)を伴ったサブルーチンラベルとして記述される。
ホットキーが入力されると当該ラベルの次の行に処理が移り、最初にReturnExitが実行されるまでが処理される。

#y::
  WinActivate, Untitled - Notepad
  Return

ホットキーに割り当てる動作が1コマンドだけなら、 :: (コロン2つ)の直後にコマンドを記述することで、1行で済ませられる。Returnは不要。

#y::WinActivate, Untitled - Notepad

(備考) プログラムは擬似マルチスレッドになっている。
ホットキーイベントの実行途中に、他のホットキーイベントが実行されることも可能。

修飾シンボル[編集]

以下の記号で修飾キーなどを指定できる。
複数のシンボルを同時に指定するときは、 !+ のように間に何も開けずに連続して記述する。

+ Shift
^ Control
! Alt
# Windowsロゴキー
< 左のモディファイアキーを使用(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代替系コマンドが割り当てられた場合、この指定に関係なく入力は乗っ取られる。

[v1.1.14+]: If the tilde prefix is attached to a custom modifier key which is also used as its own hotkey, that hotkey will fire when the key is pressed instead of being delayed until the key is released. For example, the ~RButton hotkey above is fired as soon as the button is pressed. Prior to v1.1.14 (or without the tilde prefix), it was fired when the button was released, but only if the RButton & C combination was not activated.

$ RegisterHotkey()ではなく、強制的にキーボードフックでイベントを取得する。(NT系専用)
サブルーチン内でそのホットキー自身を送信する場合、RegisterHotkey()ではホットキーイベントが再帰的に呼び出されてしまう。
#UseHook指令を使えば、$を省略できる。

使用できるキー名については、Key Listを参照。

キーラベルの仕様[編集]

ホットキーラベルは通常のラベルのようにGosubGotoで移動することもできる。
また、下例のように、複数のホットキーに同じサブルーチンを割り当てることも可能。

~*a::
~*b::
~*c::
SoundPlay,D:\AutoHotkey\typesound.wav
Return

キーの無効化[編集]

動作としてReturn文だけを割り当てると、キーを無効化することも出来る。

RWIN::Return

ホットキーをスクリプトの実行中に登録したり無効化/有効化したりするには、Hotkeyコマンドを使用する。

NT系専用の機能[編集]

Upホットキー[編集]

キー名の後に半角スペースに続いて 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,右クリックしながらホイールを上に回した

上記例では、右クリックしながら左クリックしたり、ホイールを上に回したりするとメッセージが出るが、右クリックは普通にアクティブウィンドウに送られる

AltTab/ShiftAltTab/AltTabMenu/AltTabAndMenu/AltTabMenuDismiss[編集]

これらのコマンドは、ホットキーに直接割り当てることのみ可能な特別なコマンド。
普通に 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

中央クリックで切り替え画面を表示し、ホイールで選択、再び中央クリックすると切り替え画面が消えて切替が実行される。

Lock系キーのON/OFF[編集]

SetNumlockStateなどのコマンドで、NumLockキーなどのON/OFFの状態を固定することができる。

SetNumlockState, AlwaysOn

Windows標準ホットキー[編集]

Win+EやWin+RなどのWindows標準ホットキーも動作を上書きしたり無効化したり出来る。
詳細はホットキーの上書きと無効化参照

テンキーとNumLock[編集]

テンキーの各キーはNumLockの状態によって2通りのホットキーを割り当てられる。
NumLockの状態にかかわらず1つの動作を割り当てたい場合は、次のようにする。

NumpadEnd::
Numpad1::
MsgBox, This hotkey is launched regardless of whether Numlock is on.
Return

Inputコマンド[編集]

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