AutoHotkey v2は、キーボードのキー割り当てツールとして広く知られていますが、それだけではありません。Windowsの作業を効率化する強力な自動化ツールとして、さまざまな用途に活用できます。本ガイドでは、基本的な使い方から実践的なスクリプト作成までを丁寧に解説。初心者の方にも分かりやすいように構成していますので、ぜひ参考にしてください。
- AutoHotkey v2全般について説明しています。
- そのまま利用できるAutoHotkey v2のサンプルスクリプトを用意しています。
AutoHotkeyとは何ですか?
AutoHotkeyの概要

AutoHotkeyは、Windows環境でキーボードやマウスの操作を自動化するためのスクリプト言語です。AutoHotkeyをキーマップ専用ソフトと認識してる方も多いようですが、実際はキーマップにとどまらない多機能なスクリプト言語で、特にタスクの効率化や繰り返し操作の簡略化に役立ちます。以下は主な特徴です。
- ホットキーやショートカットの設定
任意のキー入力・マウス操作を自動化、または別のキーに割り当て可能。 - スクリプト言語としての柔軟性
簡単な書式で手軽に使い始められる一方、複雑な処理・条件分岐も記述できる。 - ウィンドウやアプリ操作の自動化
ウィンドウのアクティブ化・タイトル判定などを行い、自動化フローを構築できる。 - 文字入力の高速化と置換
特定の文字列を入力すると任意の別文言に即時置き換える “テキスト置換” 機能も可能。 - GUI(グラフィカルユーザインタフェース)の作成
ポップアップウィンドウやダイアログなどの簡易的なGUIをスクリプト内で作れる。 - オープンソース / 無料
無料で利用でき、コミュニティ主導で機能改善やライブラリが多数公開されている。 - Windows専用
Windows環境の自動化に特化しており、Windowsのバージョン互換が広い。
AutoHotkey v2のインストール方法
まずはAutoHotkey v2のインストール方法を紹介します。
- AutoHotkeyは、公式サイトからインストーラーをダウンロードしてください。
- AutoHotkey v1(Version1)とv2(Version2)がダウンロード可能です。v2は正式に公開されてから日が経っていないのでWeb上で情報が少ないのですが、公式サイトでもv2の利用を推奨していますので、理由がない限り最新版のv2を利用しましょう。
- インストーラー版以外にも、公式サイトのダウンロードページにはインストール不要なZIP形式も用意しています。
- ダウンロードしたインストーラーを実行します。(ZIP形式をダウンロードした場合は、展開します。)
- インストールが完了したら、確認のために以下の手順で動作をテストします。
- 新しくスクリプトファイルを作成します。「AutoHotkey.ahk」というファイル名で作成してください。
※AutoHotkeyの仕様としては、スクリプトファイル名は任意です。しかし後で説明するスクリプト内でこのファイル名を使用している都合上、上記ファイル名に合わせてください。 - スクリプトエディタでファイルを開き、簡単なコマンドを入力します(例:
MsgBox "Hello, World!"
)。 - ファイルを保存し、ダブルクリックしてスクリプトを実行します。
- 新しくスクリプトファイルを作成します。「AutoHotkey.ahk」というファイル名で作成してください。
- 動作がうまくいったら、Windows OSへのログイン時に自動的にAutoHotkeyが起動するように設定しておきます。やり方は、AutoHotkey.ahkファイルのショートカットファイルを以下パスのスタートアップフォルダに配置するだけです。
C:\Users\{ユーザー名}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
なお、windowsのショートカット「Winキー+Rキー」を押下して「ファイルを指定して実行」画面を開き、次の文字列を入力して実行しても、スタートアップフォルダが開きます。
shell:startup
インストーラーを使わず、ZIP形式のAutoHotkeyを解凍して使用する場合は、.ahkのファイルをダブルクリックするだけでAutoHotkeyが起動するよう、.ahkの拡張子とAutoHotkey64.exeのリンクを設定しておきましょう。
AutoHotkey.ahkを右クリックしてプロパティー画面を表示し、「全般」タブの「プログラム」の右横にある「変更」ボタンを押下し、AutoHotkey64.exeを選択してください。
AutoHotkeyアイコンのメニュー
AutoHotkeyを起動していると、Windows OSのタスクバーにAutoHotkeyアイコン(緑色のHマークアイコン)が表示されます。アイコンを右クリックすると、次のメニューが表示されますので、使い方を一通り説明します。

- Open
ホットキーの確認やキーの履歴を参照できるツールが立ち上がる。 - Help
AutoHotkeyのHelp。 - Window Spy
ウィンドウのタイトルやコントロールの位置などを表示するツール。スクリプトを書く上で必要な情報を取得できる。 - Reload This Script
スクリプトを書き直したらこのメニューでスクリプトのリロードを行う。 - Edit This Script
起動させているスクリプトがメモ帳で開き更新できる。(更新したらReload This Scriptを行う。) - Suspend Hotkey
全てのショートカットを一時的に停止する。 - Pause Script
現在動いているショートカットの停止。 - Exit
AutoHotkeyを終了させる。再度AutoHotkeyを起動したいなら、.ahkファイルをダブルクリックする。
AutoHotkeyのスクリプト
基本的なスクリプトの書き方
AutoHotkey v2では、シンプルな構文でスクリプトを書くことができます。以下に基本的な例を示します。
なお、.ahkファイルを変更した場合は、変更内容を読み込ませる為、WindowsOSのトレイアイコン群の中にあるAutoHotkeyアイコン(緑色のHマークアイコン)を右クリックして、「Reload Script」を実行してください。
文字列を出力するホットキー(キーボードショートカット)の設定
まずは基本的なホットキーの設定を見てみましょう。下記スクリプトをAutoHotkey.ahkファイルに記述して、AutoHotkeyアイコンを右クリックしてリロードしてください。
; Ctrl+Alt+Cを押すと特定のテキストを出力する
^!c::
{
Send "こんにちは、AutoHotkey!"
}
このスクリプトを記述すると、メモ帳等の編集可能なエリアでCtrl+Alt+Cを押すたびに指定したテキストが出力されます。
スクリプトの意味は次の通りです。
;
は、コメント行です。スクリプトを説明するために使用され実行時には無視されます。^
は、Ctrl
キーを表します。!
は、Alt
キーを表します。c
は、アルファベットのC
キーを表します。::
は、ホットキー定義の終端を表し、以降にそのホットキーが押されたときに実行するアクションを記述します。Send
は、指定された文字列やキー入力を、現在アクティブなウィンドウに送信するコマンドです。
なお、AutoHotkey v2からは「Send(“こんにちは、AutoHotkey!”)」のようにSendの後ろにカッコを付ける記述も可能です。当サイトでは、カッコを付けるかどうかは統一していませんので、ご了承ください。
「^」や「!」は修飾記号(モディファイア記号)と呼び、キーボードの特定のキーを表しています。修飾記号には補助的な役割を担うものもあります。基本的な修飾記号は次の通りですが、詳細は公式サイトのリファレンス「ホットキー」を参照ください。
記号 | 説明 |
---|---|
# | Win (ウィンドウズロゴキー) |
! | Alt |
^ | Ctrl |
+ | Shift |
* | ワイルドカード:余分な修飾キーが押されていても、ホットキーを起動します。キーやボタンのリマッピングとセットで使われることが多いです。 [記載例] *#c::Run “calc.exe” [解説] Win+Cだけでなく、Shift+Win+C、Ctrl+Win+Cなどすべてこのホットキーがトリガーされます。 |
~ | ホットキーが起動しても、そのキーのネイティブ機能はブロックしません。 |
キー名と仮想キーコードとスキャンコード
AutoHotkeyのホットキーには、「Aキー」,「Bキー」のような英字キー以外にも「Spaceキー」や「Enterキー」や「無変換キー」など、様々なキーが利用できます。キー名の一覧は、AutoHotkey Wikiのキーリストを参考にしてください。
※このWikiはAutoHotkey v1時代のサイトですが、v1とv2でキー名に違いはありません。
ホットキーの指定では、基本的にはキー名を使用するのですが、半角全角キーや無変換キーなど、英語キーボードに存在しないキーは、AutoHotkey用のキー名として準備されていないようです。AutoHotkeyは海外のソフトですから、日本語特有のキー名が使えないのは、まぁ仕方がない事です。このような場合は、上記AutoHotkey Wikiのキーリストに記載されている仮想キーコード(vkからはじまる4桁のコード)またはスキャンコード(scからはじまる5桁のコード)を利用してください。
※AutoHotkey Wikiのキーリストは、仮想キーコードと、一般的な日本語キーボードのスキャンコードを結合して合計9桁で掲載しています。
AutoHotkeyは仮想キーコードもスキャンコードもホットキーとして利用可能ですが、これらコードはAutoHotkey特有の用語ではなく、キーボードの一般用語です。一旦このコードについて説明します。す。
仮想キーコード(Virtual Key Code):
概要:
仮想キーコードは、WindowsなどのOSが定義する抽象的なキー識別子です。物理的なキーボードの配置や種類に依存せず、特定のキーや操作を表します。
用途:
プログラムがキーの種類(例: Enter, Shift, Aキーなど)を識別するために使用します。
特徴:
OSレベルで解釈され、アプリケーションで使用されます。
キーに固有の数値(整数値)が割り当てられています。
キーボードの物理レイアウト(QWERTYやAZERTYなど)に関係なく、機能としてのキーを一意に識別。
スキャンコード(Scan Code):
概要:
スキャンコードは、キーボードのハードウェアがキー押下・離脱時に生成する生の信号データです。これにより、キーの物理的な位置が表されます。
用途:
ハードウェアレベルで物理的なキー位置を識別するために使用されます。
特徴:
スキャンコードはキーボード自体が送信する信号で、キーの押下 (Make Code
) や離脱 (Break Code
) を表します。
キーボードのレイアウトによって異なる場合があります(例: 英語配列と日本語配列で異なる)。
OSはスキャンコードを受け取り、仮想キーコードに変換します。
なお、タスクトレーのAutoHotkeyをクリックし、View – Key history and script info (Ctrl + k)を選択すと、次の図のように直近で押下したKeyの仮想キーコード(VK)とスキャンコード(SC)を参照する事ができます。仮想キーコードやスキャンコードがわからない場合は、実際にキーを押下して、この画面で確認してください。

本日の年月日を出力するホットキーの設定
皆様の中でも、普段からExcelを使う方は多いかと思います。このExcelのセル上で Ctrl+「;」(セミコロン)を押下すると、本日の年月日を出力できる事をご存じでしょうか。私はこのショートカットキーを重宝しているのですが、残念ながらExcelシート内でしか機能しません。
このExcelショートカットキーと同等の機能を、AutoHotkeyのホットキーに設定して、どのようなアプリケーションでも本日の年月日を出力できるようにしてみましょう。
#HotIf Not WinActive("Excel") ;Excelは元々Ctrl+セミコロンで日付入力になるので無効に。
^vkBB::
{
tmp_Clip := ClipboardAll() ; クリップボードに登録してから貼り付け
A_Clipboard := FormatTime(, "yyyy/MM/dd")
Send "^v"
Sleep 50 ; "^v"開始前にA_Clipboard:= tmp_Clipが完了する事があった為Sleepを入れる。
A_Clipboard := tmp_Clip
}
#HotIf
- #HotIfディレクティブは、ホットキーが有効になるために満たすべき条件を指定するために使用することができます。今回WinActive関数を使い、Excelがアクティブではない時だけホットキーが有効になるようにしています。
- WinActiveは、指定されたウィンドウがアクティブであるかどうかを調べる関数です。
- vkBBは「;」(セミコロン)を表す仮想キーコードです。
このスクリプトを記述すると、Ctrl+;(セミコロン)を押すたびに本日の年月日(例:2024/12/31)が出力されます。
不要なInsertを無効にするホットキーの設定
皆さん、Insertキーは使っていますか? ほら、Deleteキーの上にあるInsertキーです。たまに 間違えて押下してしまい、文字を上書いてしまう、厄介なキーです。
邪魔だと思う方は、次のスクリプトのように、insertキーを無効にしてしまいましょう。ただし、万が一使う事がある場合に備えて、長押しした場合はInsetキーが有効になるよう設定しています。
Insert::
{
if KeyWait("Insert", "T0.4") { ; Insertキーの押し下げがタイムアウトせずキーが離された場合
ToolTip "Insertキーを有効にするには長押ししてください。"
SetTimer () => ToolTip(), -2000
}
else { ; 長押しでタイムアウトした場合
Send("{Insert}")
if GetKeyState("Insert", "T") { ;上書きモードの状態を取得。上書きオンの場合
ToolTip "Insert Mode ON."
SetTimer () => ToolTip(), -2000
}
else { ; 上書オフの場合
ToolTip "Insert Mode OFF."
SetTimer () => ToolTip(), -2000
}
KeyWait("Insert") ; キーを離した時にホットキー発動を防止
}
}
- Insertキーを普通に押下しても、ToolTipが2秒表示されるだけで、Insertモードに変化はありません。
- Insert キーを長押しした場合は、Insertモードが変化します。その旨のToolTipが2秒表示されます。
自動的に.ahkファイルをリロードするホットキーの設定
AutoHotkey.ahkスクリプトファイルに変更を加えた後は、スクリプトファイルをリロードする事で、AutoHotkeyに変更内容が反映されます。しかし変更の度にタスクトレーのAutoHotkeyアイコンを右クリックしてリロードするのは、手間になりますよね。そこで、多くのエディターで共通に使われる保存用ショートカットキー「Ctrl+s」で、自動的にAutoHotkeyにリロードするホットキーを用意してみます。
; Ctrl+sでAutoHotkey.ahkを保存したと同時にリロードする
#HotIf WinActive(".ahk")
^s::
{
AFKFileTime := FileGetTime(A_ScriptFullPath, "M") ; M=修正時間
AFKFileTimeFmt := FormatTime(AFKFileTime, "yyyy/MM/dd HH:mm:ss") ; 日時表示形式を修正
Send("^s") ; 更新前のファイル日時を取得したい為、ホットキーにチルダ(~)を付けずにここでSend("^s")する。
Sleep(250)
AFKFileTime2 := FileGetTime(A_ScriptFullPath, "M")
AFKFileTimeFmt2 := FormatTime(AFKFileTime2, "yyyy/MM/dd HH:mm:ss")
MsgBox(A_ScriptFullPath "をReloadします`n変更前: " AFKFileTimeFmt "`n変更後: " AFKFileTimeFmt2)
Reload()
}
#HotIf
- #HotIf WinActive(“.ahk”) で、アクティブなウィンドウのタイトルに「.ahk」が入っている場合だけ、ホットキーが有効になります。
- A_ScriptFullPathは、実行中の.ahkファイルのフルパスを表します。
このスクリプトを組み込んでおけば、エディタに依存せず(編集中のファイル名がタイトルに出てこないエディタでは動きませんが)、AutoHotkey.ahkファイルを編集後にCtrl+sを押下する事で、ファイル保存とAutoHotkeyへのリロードを同時に実行してくれます。
60%キーボードで使いたいスクリプト

AutoHotkey v2は、キーの数が少ない60%キーボードとも相性が良いツールです。少ないキーを最大限に活用する方法をいくつか紹介します。
全てのキーボードでAutoHotkeyを使うという生活
60%キーボード等の小さいキーボードは、ホームポジションから手を放さず作業ができるメリットがありますが、コンパクトな分だけ矢印キー・F1~F12キー・ESCキー・Homeキー・Endキー等が物理的に存在しなかったり(Fnキーとのコンビネーションで入力するようになっていたり)、配置が特殊だったりします。このような特殊なキー操作・キー配置に慣れてしまうと、他のキーボードが使い辛くなるジレンマがあります。本当は家のPC環境で60%キーボードを使いたくても、会社では通常サイズのキーボードを使う必要がある為、泣く泣く家で60%キーボードを使う事を諦めた方もいるのではないでしょうか。
そんな貴方に朗報です。AutoHotkeyを使えば、会社の通常サイズのキーボードでも、家の60%キーボードと同じ使い方ができますよ。
60%キーボードの場合は、付属のキーマップ変更ツールでキーの場所を自由に割り当てる事ができますが、基本的にはキーマップ変更ツールは使用せず、AutoHotkeyで設定するのです。 通常サイズのキーボードも、極力60%キーボードと同様の設定(ahkファイル)をAutoHotkeyで読み込んでキーボードを使うのです。通常サイズのキーボードでもF1~F12キーや矢印キーを使う必要がなくなり、より効率的なキー入力ができるようになるでしょう。
会社のセキュリティーポリシー上、Windowsの管理者権限を使ってPCへAutoHotkeyをインストールできない方でも、AutoHotkeyはzipファイルとしても提供していますので、多くの人はAutoHotkeyを動かす事ができると思います。Windowsの一般ユーザー権限でも、zipファイルの展開はできますからね。でも、セキュリティーに厳しい会社にお勤めの方は、ちゃんと管理部門にAutoHotkeyを使う許可は取りましょう!
F1~F12キー、矢印キー、Deleteキー、Escキー等の割り当て
60%キーボードは、次のキーが省略されている場合が多いです。
・F1~F12キー
・矢印キー
・HOMEとENDキー
・PageUpとPageDownキー
・半角全角キー
・ESCキー
・DELキー
これら省略されたキーは、通常はFnキーと他のキーのコンビネーションで入力できるようになっています。
家で使う60%キーボード特有のキーコンビネーションの癖が通常サイズのキーボードで出ても良いように(被害が小さいように)、次の方針でAutoHotkeyを使用する事としましょう。
- AutoHotkeyは使用する全てのPCに導入する
(Fnキーを使用したキー入力の癖がどのPCで出ても良いように) - AutoHotkeyのスクリプトファイルは全てのPCで共通とする
(スクリプトのメンテナンスの手間を減らす為) - AutoHotkeyで無変換キーをFnキーの代用として使う
(無変換キーをFnキーとして利用すれば、AutoHotkeyが導入していない環境で間違えてコンビネーションを入力しても被害がほとんど無いので、Fnキーの代用として相応しい。存在する日本語キーボードを使う事) - キーボードの「1」キーの左のキーは「半角全角キー」の前提
(60%キーボードでデフォルトがESCになっている場合は付属のキーマップ変更ソフトで半角全角キーに変換)
では、上記方針と前提に従い、日本語キーボードの無変換キーをFnキーとして使い、Fnキーと同時に別のキーを押下する事でF1~F12キーや矢印キー等を代用するスクリプトを用意します。
英語キーボードの場合は無変換キーが存在しませんので、適宜Left AltキーをFnキーとして使用するなど工夫してください。また英語キーボードの場合はF12に割り当てるキーはチルダ[^]ではなく[=]ですので、ここも変更する必要があります。
;HotKeyのループを防ぐディレクティブ。例えばa::Send "a" がループになるのを防ぐ
#UseHook true
;vk1Dは無変換キーの仮想コード
;Functionキーを数値に割り当て
vk1D & 1::Run("explorer") ;F1キーは使わないので,explorer起動に割り当て
vk1D & 2::Send("{Blind}{F2}")
vk1D & 3::Send("{Blind}{F3}")
vk1D & 4::Send("{Blind}{F4}")
vk1D & 5::Send("{Blind}{F5}")
vk1D & 6::Send("{Blind}{F6}")
vk1D & 7::Send("{Blind}{F7}")
vk1D & 8::Send("{Blind}{F8}")
vk1D & 9::Send("{Blind}{F9}")
vk1D & 0::Send("{Blind}{F10}")
vk1D & -::Send("{Blind}{F11}")
vk1D & ^::Send("{Blind}{F12}")
;矢印キーをviエディタ風に割り当て
vk1D & h::Send("{Blind}{Left}")
vk1D & j::Send("{Blind}{Down}")
vk1D & k::Send("{Blind}{Up}")
vk1D & l::Send("{Blind}{Right}")
;その他の割り当て
vk1D & n::Send("{Blind}{Home}")
vk1D & m::Send("{Blind}{End}")
vk1D & ,::Send("{Blind}{PgUp}")
vk1D & .::Send("{Blind}{PgDn}")
;アプリキーはキーボードによって位置が違ったり無かったりするのでaに割り当て
vk1D & a::AppsKey
;無変換キー単独クリックの割り当て。これが無いとカナ変換が機能しない。UP時にSendされる
vk1D::Send("{vk1D}")
;Delの割り当て
+BS::Send("{Del}")
^+BS::Send("^{Del}")
;SC029は半角全角キーのスキャンコード。「1」キーの左のキーが半角全角キーである想定。1回押下はIME切り替えで、2連打はEscの機能とする。チルダ(~)があるのでSend("{SC029}")の記述は不要。
~SC029::
{
If (A_PriorHotkey == A_ThisHotkey && A_TimeSincePriorHotkey < 400) {
Send("{Esc}")
}
}
- 無変換キーと別キーを使い、各種キーを入力可能にしています。
- 無変換キーはJISキーボードにしか存在しない都合上、AutoHotkeyにキー名が割り当てられていませんので、仮想キーコード「vk1D」で記載します。
- 無変換キー+数値等 の押下で、F2~F12をSendしています。しかしF1だけはSendしていません。F1はヘルプ画面を表示する為に使われますが、筆者はF1でヘルプ画面を立ち上げる事がないので、変わりにexplorerを立ち上げるホットキーとして割り当てています。
- 無変換キー単独で押下した場合は、今まで通り「カナ・カナ・かな」のトグルキーとして機能します。
- 半角全角キーは、ダブルクリックでEscキーをsendする設定にしてあります。ダブルクリック時は全角半角キーも2回Sendされているのですが、IMEは英語→日本語→英語 もしくは 日本語→英語→日本語という遷移で入力言語が元に戻りますので、IMEモードに影響はありません。
ウィンドウを閉じるスクリプト
WindowsOSを使用していると、いつの間にかブラウザやエクスプローラーが大量に立ち上がっていて煩わしくなりますね。マウスでウィンドウの右上のバツボタンをクリックするのは手間ですし、Alt+F4のショートカットでウィンドウを閉じる方法は、F1~F12キーが省かれている60%キーボードだと手間になります。そんな時は、AutoHotkeyを使ってCtrl+wのショートカットキーでウィンドウを閉じるのはどうでしょうか。
;HotKeyのループを防ぐディレクティブ。例えばa::Send "a" がループになるのを防ぐ
#UseHook true
^w::
{
If WinActive("ahk_exe chrome.exe")|| WinActive("ahk_exe msedge.exe")|| WinActive("ahk_exe firefox.exe")|| WinActive("ahk_exe Code.exe") {
Send "^{w}"
} Else {
Send "!{F4}"
}
}
- #UseHook ture : スクリプトの行の先頭で、特定のキーワード(
IfWinActive
,Include
,UseHook
など)の前に置かれる # は、スクリプト全体の動作に影響を与える特別な指示(ディレクティブ)であることを示します。このディレクティブにより、Send
コマンドで送信されたキー入力が、自分自身のホットキー(この場合は^w
)を誤って再びトリガーしてしまうループ現象を防ぐ効果があります。#には、Winキーを表す場合と、ディレクティブを表す場合の、2種類の意味がありますので注意してください。 If WinActive(...)
: 現在アクティブになっているウィンドウが指定された条件に一致するかどうかを確認します。ahk_exe ...
は、実行ファイル名でウィンドウを指定する方法です。
元々ブラウザ(例:Chrome, Edge, Firefoxt)やVisual Studio Codeは、Ctrl+wでタブを閉じる事ができます。これらアプリケーションがアクティブな場合は、Ctrl+wの押下でAlt+F4を送る必要はありません。そこでIf WinActive文で分岐して、Ctrl+wの押下でそのままCtrl+wをsendしています。
それ以外のアプリケーションがアクティブな場合は、Alt+F4を送るようにしています。
エラーのトラブルシューティング
AutoHotkey v2でスクリプトが動作しない場合、以下を確認してください。
- スクリプトの構文に間違いがないか確認します。
この際はスクリプト内に
msgbox [変数名]
を挿入して確認したり、
ToolTip [変数名]
SetTimer () => ToolTip(), -1000
のようにToolTipで変数内容を確認しながらデバックを進めてください。 - タスクトレーのAutoHotkeyアイコンをクリックし、View を参照すると、ホットキーの履歴やキーのUp/Downの履歴を確認できます。こちらで各種キーがAutohotkeyで認識されているか確認してください。
- 管理者権限でスクリプトを実行してみてください。
- 最新版のAutoHotkeyをインストールして、動作確認してください。
まとめ
AutoHotkey v2は、簡単なタスクから複雑な自動化まで幅広く対応できる便利なツールです。本記事で紹介した基本的な使い方をマスターすれば、作業効率が大幅に向上するでしょう。ぜひ、実際にスクリプトを作成しながら、自分だけの便利ツールを開発してみてください!
AutoHotkey をさらに使いこなしたい方はこちらもご参照ください。