当サイトは、アフィリエイト・アドセンス広告を掲載しています。消費者庁が、2023年10月1日から施行予定である景品表示法の規制対象(通称:ステマ規制)にならないよう、配慮して記事を作成しています(記事はこちら、消す方法はこちら

参考:令和5年10月1日からステルスマーケティングは景品表示法違反となります。 | 消費者庁

【AutoHotkey】キーに別の機能を割り当てるソフトの使い方

2021年12月29日AutoHotkey

AutoHotkeyのアイコン

この記事では、好きなキーに設定した操作を割り当てるフリーソフト「AutoHotkey(オートホットキー)」について書きます。

キー割り当ての変更から、アプリの実行など、考え方次第で無限の可能性が待っています。

AutoHotKeyのスクリーンショット

自分でキー割り当てを変更、新しいショートカットキーを作成するソフトです。AutoHotkey(以下、AHK)の独自コード(言語)を書き込むことで、それに従った操作を実行できます。

ざっくり、以下のようなことができます。

こんなことができる具体的な説明
キー割り当ての変更Aを押したら、Bを押したことにする
新たなショートカットキーの作成Insertを押したら、パソコンをスリープする
特定のキーを押したら特定のアプリを起動Insertを押したら、ブラウザを起動
特定のキーを無効化Insertを押しても反応しないようにする
条件分岐やループでより複雑な操作If文など。Excelが起動している時だけ、Shift+マウスホイール回転で水平スクロールするようにする

キー割り当ての変更だけでなく、特定のキーを押したら、指定したアプリの起動、ショートカットアイコンの登録など、キー割り当てを超えた高度なことも設定可能です。一言でいうなら、Windowsの究極の効率化ツールです。

本記事では、AHKの基本的な使い方について書きます。筆者はAutoHotKey初心者であるため、ベテランさんには参考にならないと思います。

Windows10、Windows11どちらでも利用できます。Windows10からWindows11にアップグレードしても、コードを書き換える必要はありません。そのまま使えます。

高度な操作になるにつれ、書き込むコードの難易度も上がりますが、「こういうことしたいなぁ~」が見事に解決できるソフトです。初心者のうちは、キー割り当て目的での利用がおすすめです。

本ソフトは、スクリプトを実行している時だけ有効になります。無効にしたい時は、いつでもタスクトレイから終了できます。スタートアップに登録して、自動起動することもできます。

リリース元:Chris Mallet
記事執筆時のバージョン:2.0.4(2023年07月08日)

ダウンロード方法

以下のサイトからダウンロードできます。

「Download」をクリックします。

AutoHotKeyのダウンロード手順画像1

どちらのバージョンを利用するか選択します。

2022年12月21日までは、「1.1」が安定版で、「2.0」がベータ版だったので、基本的には「1.1」を選んでおけば問題ありませんでした。しかし、2022年12月21日から「2.0」が正式にアップデートしました。これにより、どちらがいいか悩みます。

調べてみると、どうやら新しいバージョンは、これまでのAutoHotKeyコードと構造が異なるせいで、後方互換性がないようです。(詳しくはこちらのサイト様参考)

僕は、「1.1」から利用していたので、今すぐに移行して、コード全部書き直し…となると、ちょっとめんどくさいです。そこで、本記事は、「1.1」で解説したいと思います。ただし、今後移行する可能性も十分にあります。

AutoHotKeyのダウンロード手順画像2

ダウンロードが完了したら、起動します。

「AutoHotKey」のセットアップファイル画像

こだわりがない場合、「Express Installation」をクリックします。

AutoHotKeyのインストール手順画像1

すぐインストールが終わるので、「Exit(終了)」をクリックします。インストールは完了です。

AutoHotKeyのインストール手順画像2

使い方

流れは、スクリプトの記述→実行の2ステップです。実行は、作成したファイルを起動するだけなので、メインの作業はスクリプトの記述になります。

AHKは独自の言語なので、一から学んでいきます。本ソフトは、ソフトで色々設定していくタイプではなく、テキストエディタ(Windows標準のメモ帳、Microsoftが提供しているVisual Studio Codeなど)から書き込んで作成するタイプです。

スクリプトの作成

デスクトップ、またはフォルダー内の空いているところを右クリック→新規作成→「Autohotkey Script」をクリックします。

AutoHotKeyファイルの作成手順画像1

専用の拡張子「.ahk」ファイルができるので、好きな名前を決めます。日本語でも英語でもOKです。右クリック→「プログラムから開く」から、好きなテキストエディターで開きます。Windows標準ならメモ帳です。

AutoHotKeyファイルの作成手順画像2

僕は、Microsoftが提供している無料のコードエディターソフト「Visual Studio Code(ビジュアル・スタジオ・コード)」を利用しています。

プラグインを導入して、ハイライト表示にすることで、コードが一気に見やすくなります。自動保存機能もあるので、いちいち保存する手間が省けます。

Visual Studio Codeで、AutoHotKeyファイルを開いている画像

Macはよく分かりませんが、Windowsでコードエディターをするなら、コレ!ってくらい有名だと思います。

参考:[AutoHotKey]メモ帳で編集とかありえない!VSCodeで編集するための準備

メモ帳が開くので、スクリプトを記述していきます。最初に4行ほどの英文が書かれていますが、気にしなくてOKです。削除しても削除しなくても正常に動作します。よく分からない場合は、そのまま残していた方がいいかなと思います。

「新規 AutoHotkey Script」をメモ帳で開いた画像

記述

具体的にどうやってコードを書けばいいのかは、こちらで詳しく解説します。本項目では、とりあえず基本の形を紹介します。以下のコードをコピペで貼り付けてみましょう。キーボードのabに割り当てるコードです。

;aキーをbキーに割り当て
a::b

Ctrl+S、またはメモ帳上部のファイル→「上書き保存」をクリックします。保存できたら、メモ帳を「×」で閉じてOKです。後でまた書き込む場合は、そのままでOKです。

実行

コードを記述しただけだと、意味がありません。スクリプトを実行する必要があります。起動している間は、コードが有効になります。自分の好きなタイミングでオンオフできる点も便利ですね。

作成したスクリプトを右クリック→「Run Script」をクリックします。ダブルクリックでも起動できます。

AutoHotKeyファイルを実行する手順画像

タスクトレイ(通知領域)に、AutoHotkeyのアイコンが表示されます。

タスクトレイにあるAutoHotKeyファイルアイコン画像

余談ですが、「AutoHotKey」のタスクトレイアイコンは、好きなように変更できます。まぁ、最初のうちはこだわらなくてOKです。とりあえず、そういうこともできるという知識の紹介です。

エラーが出た場合は、コードの記述に間違いがあるので、もう一度見直しましょう。適当にメモ帳を開いて、キーボードのaを押すと、bが入力されます。

AutoHotKeyを使って、「a」を「b」に割り当てたサンプルGIF画像

終了

タスクトレイのAHKアイコンを右クリック→「Exit」をクリックします。

タスクトレイのAutoHotKeyの右クリックメニュー画像

スタートアップに登録する方法

Windows起動時に自動起動するようスタートアップに登録しておくと便利です。

以下の文字列をエクスプローラーのアドレスバーに貼り付けることで、スタートアップフォルダーを開けます。ここに実行したいAutoHotKeyファイル(ahk)のショートカットアイコンを配置します。

shell:startup

詳しくは、下記記事を参考にしてみてください。

言語の書き方

基本的なコードの書き方、コメントアウト、通常のキー、スキャンコード(SC)、仮想キー(VK)、修飾キーの大きく6つに分けて説明します。

基本の書き方

AHKは、以下のような構成になっています。どれだけコードが複雑化しても、これだけは変わりません。

元のキー::割り当てたいキー、機能

変換前と変換後の間に、コロン記号(::)を2つ書くのがルールです。あとは、このルールに沿って書き換えていきます。

コメントアウト

;「セミコロン」記号は、コメントアウトだよ
実際のコード

セミコロン記号(;)は、コードとは関係ないただのコメントです。スクリプトを実行しても、ここの部分は実行されません。コードだけだと、後から見返した時にどんな内容だったのか分からなくなるので、コメントアウトで説明を書くことをおすすめします。

通常のキー

そのままキーを入力する方法です。まずはこの書き方をマスターしてみましょう。いくつか例を出しておきます。

;dをgに割り当て
d::g

;大文字のa(A)を大文字のc(C)に割り当て
A::C

;数字を別のキーに割り当て
1::k

;矢印を別のキーに割り当て
Left::a

;別のキーを矢印に割り当て
a::↓

;Insertを別のキーに割り当て
Insert::Delete

;AltをWindows(左)に置き換え
Alt::LWin

通常のキーは、そのまま入力することで認識されます。

大文字だけ認識させたい場合は、Shiftを押しながら大文字で登録します。通常の小文字はそのまま入力され、大文字(Shiftを押しながら)入力時は、割り当てたキーが実行されます。

矢印は、「LeftRightUpDown」や、「(変換元のみ)」で指定できます。

InsertDelete、その他のキーについては、公式サイトを参考にしてみましょう。

上記サイトにアクセスすると、キーボードが表示されるので、登録したいキーをクリックします。

「キーリスト AutoHotkey Wiki」のスクリーンショット1

ページがスクロールして、目的のキーが表示されます。コピペしましょう。

「キーリスト AutoHotkey Wiki」のスクリーンショット2

スキャンコード(SC)

通常のキー指定だと、エラーがでちゃう、うまく動作しない場合は、スキャンコードで指定しましょう。

「Note: The hotkey I will not be active because it does not exist in the current keyboard layout.」エラー画像
Note: The hotkey I will not be active because it does not exist in the current keyboard layout.
(注意:指定したホットキーは、現在のキーボードレイアウトに存在しないため、アクティブにはなりません。)

スキャンコードとは、キーボードを押した時にCPU(パソコンの頭脳)に伝達されるコードのことです。

キーボードは、Aを押した時に、そのままAが送られるわけではありません。sc01Eといったように特殊なコードに置き換えられてCPUに送られています。目に見えない第二のキーボードって感じです。

sc〇〇〇」といったように、頭文字が「sc(スキャンコード)」で始まります。調べる方法はいくつかありますが、先人たちが残したものがあるので、そのままコピペするのが一番楽です。

下記サイトにスキャンコードの一覧があります。

以下のような書き方です。

;数字の「1」をWindowsに割り当て
sc002::sc15B

仮想キー(VK)

スキャンコードと同じで目に見えないキーボードです。キーボードには、それぞれ16進数の数字が割り当てられています。キーを識別するためです。これが仮想キーです。

通常キーとスキャンコードさえ覚えておけば、全てのキーをカバーできるので、仮想キーを無理に理解する必要はありません。まずは通常キー、スキャンコード、修飾キーを使えるようになりましょう。

VK」で始まるのが特徴です。本記事では、頭がこんがらがるだけだと判断し、詳しくは説明しません。今後記載するコードも仮想キー以外で記述します。

;セミコロンを数字の「0」に割り当て
vkBB::vk30

参考:代表的な仮想キーコード一覧 – BizRobo! ナレッジベース

修飾キー

CtrlShiftAltWindowsなどの単体では機能しないキーのことです。(Windowsは例外)

Ctrl+Cでコピー、Alt+Tabでウィンドウスイッチャー、Windows+Shift+Sで切り取りツールといったように、他のキーを組み合わせることで使えるキーです。これ単体では機能しないので、他のキーと組み合わせて使いましょう。

修飾キーの書き方
Win#
Ctrl^
Shift+
Alt!

いくつか例を出しておきます。

;Insertに切り取りツール(Windows+Shift+S)を割り当て
Insert::#+s

;Windows+Tabに全選択(Ctrl+a)を割り当て
#Tab::^a

;Ctrl+Qにプレーンテキストの貼り付け(Ctrl+T)を割り当て
^q::^t

既存のショートカットキーを置換することもできますし、全く新しいショートカットキーを作ることもできます。とりあえず、AHKに触れたら、通常キーと修飾キーの2つは押さえておきたいです。

修飾キーについて、より詳しく知りたい場合は、下記サイトが参考になります。

実用編、応用編

上記で解説したコードの書き方を活用して、より実用的なコードを紹介します。

キー割り当て

スキャンコード、複数キーを指定する時は、「Send」と{}記号を活用します。特にスキャンコードを複数指定する時は、{}で囲むのが重要になってきます。

{}は変換後のキーを囲みます。変換元には、何も付ける必要はありません。

いくつか実用的なコードを紹介します。

;CapsLookをDelete割り当て
sc03A::Send, {sc153}

;無変換にEnter割り当て
sc07B::Send, {sc01C}

単一のスキャンコードは、「Send」や、{}で囲む必要はないのですが、こんがらないように統一して付けるほうがおすすめです。

;単一キーの場合は、囲まなくても動作する
;CapsLookをDelete割り当て
sc03A::sc153

;無変換にEnter割り当て
sc07B::sc01C

複数キー割り当て

;複数キーの基本的な形
〇〇::Send, {〇〇}

;かな変換にモニター間移動
sc070::Send, {RWin Down}{Shift Down}{left}{Shift Up}{RWin Up}

;Ctrl+gに「こんにちは」の文字を割り当て
^g::Send,こんにちは

「かな変換にモニター間移動」が便利です。

参考:【AutoHotkey】デュアルモニター間のウィンドウ移動のやり方【ショートカットキー】 | オカメJP|あるドイツ在住日本語教師のブログ

修飾キーと通常キーの組み合わせの場合、{}や「Send」をつける必要はありません。つけても動作するので、よく分からない場合はつけておきましょう。

「こんにちは」のように、日本語や英単語も指定できます。よく使う挨拶文を登録しておくといったことができます。

逆に言えば、キーとして認識させたい時は、「Send」が必要ということです。良い例と悪い例を書いておきます。どちらも、Ctrl+Homeを指定している想定です。

;良い例
Send, ^{home}

;悪い例
Send, ^home

悪い例のほうは、Homeキーとして認識してくれません。「home」という感じで、文字として認識されます。

修飾キー以外の複数キー割り当て

;a+bにcを割り当て
a & b::Send, c

WindowsAltなどの修飾キー以外のキーを組み合わせる場合は「」を使います。&の前後には、半角空白を入れます。こうしないと動作しません。注意点ですが、上記コードだと単体キーのaが機能しなくなります。

「a」キーが反応しなくなっているGIF画像
最初に指定したキーが反応しなくなる

単一キーも有効にするには、以下のようにします。

;a+bにcを割り当て(a単体も使えるようにする)
~a & b::Send, c

最初に「~」を入れるだけです。これで、a単体も機能します。

マウス操作の割り当て

キーだけでなく、マウス操作も組み込められます。

マウス操作書き込むコード
ホイール上回転WheelUp
ホイール下回転WheelDown
左クリックLButton
右クリックRButton
サイドボタン1(進む)XButton1
サイドボタン2(戻る)XButton2

例として、左Alt+ホイールの上下回転でウィンドウスイッチャー(Alt+Tab)を表示するコードを紹介します。

;左Alt+ホイール回転でAlt+Tab
LAlt & WheelDown::AltTab
LAlt & WheelUp::ShiftAltTab

参考:ホットキー AutoHotkey Wiki

Shift+ホイール回転で、水平(横)スクロールさせるといったこともできます。

特定のキーを無効化

Return」コマンドで、キーを無効化できます。押しても反応しなくなります。

;特定のキーを無効化するコードの書き方
〇::Return

;Windows11のウィジェットショートカットキーを無効化
^w::Return

個人的には、無効化よりも別の機能を割り当てる方がいいかなと思います。この方法を活用して、Ctrl+マウスホイール回転のアイコン拡大縮小を無効化することもできます。

;Ctrl+マウスホイール回転を無効化
^WheelUp::return	;マウスホイール上回転
^WheelDown::return	;マウスホイール下回転

特定のキーでアプリ起動

Runコマンドで、指定したアプリを起動できます。

;特定のキーでアプリ起動するコードの基本的な形
〇〇::Run, "アプリの場所"

;右Alt+aでMutant(とあるゲーム)起動
!a::Run, "D:\デスクトップ\ゲーム\Mutant Year Zero Road to Eden.url"

;Windows+1でChrome起動
#1::Run, "C:\Program Files\Google\Chrome\Application\chrome.exe"

;Windows+3でChromeを開いて、特定のサイトにアクセス
#1::Run, "C:\Program Files\Google\Chrome\Application\chrome.exe""https://www.naporitansushi.com"

;Alt+fでデスクトップ起動
!f::Run, "D:\デスクトップ"

;Alt+Spaceで、好きなフォルダーを起動
!sc039::Run, "D:\デスクトップ\素材\アイキャッチ素材"

アプリ、ショートカットアイコン、フォルダーなど、自由に設定できます。

Ctrl+Insertにスリープ(ショートカット)を割り当てるといったことも可能です。詳しくは、下記記事を参考にしてみてください。

複数アプリの同時起動もできます。

;Windows+5でChromeとデスクトップ起動
#1::
Run, "C:\Program Files\Google\Chrome\Application\chrome.exe"
Sleep 500
Run, "D:\デスクトップ"
Return

上記コードは、Chromeを起動→500ミリ秒(0.5秒)待機→デスクトップフォルダーを起動するという意味です。

Run」と、「Sleep」コマンドを活用していきます。改行して、「Run」で追加したいアプリを記述します。「Sleep」は、「次のコマンドまで〇ミリ秒待機する」という意味です。単位はミリ秒なので、1秒=1000になります。

特定のアプリでだけで発動

特定のアプリが起動(アクティブ)している時だけ、コードを発動できます。

;特定のアプリでだけ動作するように制限
#IfWinActive 〇〇〇 ;実行ファイル名
ここにコードを書く
#IfWinActive

条件分岐(If)の「WinActive」コマンドを使います。ここらへんから、ちょっと高度になります。Chromeブラウザ上の中クリック+ホイール回転にページ最上部、最下部に移動を割り当てたコードを紹介します。

;Chrome
#IfWinActive, ahk_exe chrome.exe
;中クリック+ホイール回転で、ページ最上部、最下部移動
~MButton & WheelUp::Send,^{Home}
~MButton & WheelDown::Send,^{End}
Return
#IfWinActive

最初と最後を、「#IfWinActive」で囲むというルールになっています。最初の「#IfWinActive」の後に実行ファイル名を記述します。

適当にAutoHotKeyファイルを実行して、タスクトレイにあるアイコンを右クリック→「Window Spy」をクリックすると起動できます。

AutoHotKey付属の「Window Spy」の使い方手順画像1

あるいは、エクスプローラーを開いて、AutoHotKeyのインストール場所を開きます。デフォルトでは以下の場所に保存されています。

C:\Program Files\AutoHotkey

AutoHotKeyフォルダー内の「WindowSpy.ahk」をダブルクリックします。これで同じように起動できます。

頻繁に使う方は、右クリック→「ショートカットの作成」で、デスクトップなどの好きな場所に配置しておくといいかもしれません。

「Window Spy」ウィンドウを起動できたら、名前を調べたいウィンドウをクリックします。

AutoHotKey付属の「Window Spy」の使い方手順画像2

Window Spy内に、ウィンドウの情報が表示されます。重要なのは、上から数行です。

AutoHotKey付属の「Window Spy」の使い方手順画像3

以下のような構成になっています。

新しいタブ – Google Chromeウィンドウタイトル
ahk_class Chrome_WidgetWin_1ウィンドウのクラス名
ahk_exe chrome.exeウィンドウのプロセス名
ahk_pid 23448ウィンドウのプロセスID名

基本的には、タイトル名、プロセス名の2つで、思い通りの動作にできると思います。

例えば、Chromeブラウザ上で、F1キーを無効化したい場合は、以下のようになります。Chromeだけ無効化して、Edgeなどでは無効にしません。

#If WinActive("ahk_exe chrome.exe")
F1::Return
#If

ウィンドウタイトルで指定する場合は、大文字と小文字をしっかり区別しましょう。タイトル名が「Chrome」になっている場合、「chrome」だと認識してくれません。

参考:【Chrome】F1の「Google Chrome ヘルプ」を無効化する方法

Return」は、無効化の意味もありますが、区切りという意味も持っています。コードを複数行書く時には、末尾に「Return」を書いて、区切るようにします。

そうしないと、Aのコマンドを実行した後に、後述しているBのコマンドも一緒に実行されるという思わぬ事故が起きます。とりあえず、複数行になる時は、最後に「Return」をつける習慣をつけましょう。

特定のアプリ以外で実行

上記とは逆で、特定のアプリが起動していない時だけ発動するといったこともできます。

;特定のアプリでだけ動作するように制限
#IfWinNotActive 〇〇〇 ;実行ファイル名
  コードを書く
#IfWinNotActive

今度は、「#IfWinNotActive」で囲みます。実行ファイル名は、「#IfWinActive」と同じ書き方です。

例として、Vivaldiがアクティブではない時だけ、Ctrl+マウスホイール回転を無効にするコードを紹介します。

;Vivaldiブラウザがアクティブではない時に発動
#IfWinNotActive ahk_exe vivaldi.exe
  ^WheelUp::return	;マウスホイール上回転を無効
  ^WheelDown::return	;マウスホイール下回転を無効
#IfWinNotActive

Vivaldiブラウザでは、今まで通りページの拡大縮小が利用できますが、それ以外では無効化されて、何も起きなくなります。

特定のウィンドウ名だけで発動

特定のウィンドウ名で制限できます。例えば、以下のように、ブラウザで特定のタブを開いている時だけ動作させるといったことができます。

  • TweetDeckのページをブラウザで開いている時だけ
  • Googleで調べものをしている時だけ

サービス独自のショートカットキーを、使いやすいようカスタマイズする時に便利です。マイナーだとは思いますが、使いこなせると結構便利です。

;特定のウィンドウ名に絞り込むコードの基盤
#If WinActive("ウィンドウ名")
;ここにコードを書いていく
#If

「ウィンドウ名」の部分に、使いたいサービス名を入力します。全部を入力する必要はなくて、一部だけでもOKです。

例えば、ツイートデックなら「Tweet」でも「TweetDeck」でもOKです。「ツイートデック」といったように正式名称じゃない場合はダメです。ただし、「Tweet」だけだと、ツイートデックではなく、「Tweet」が含まれるウィンドウ全てが対象になるので気を付けましょう。

ウィンドウ名を調べるには、登録したいサービス(サイト)をブラウザで開いて、タブ名をそのまま書くだけです。当サイトなら「ナポリタン寿司のPC日記」ですね。

Vivaldiのタブタイトル画像

「ここにコードを書いていく」の部分に、実装したいコードを書きます。例として、ツイートデックで、マウスのサイドボタン+ホイールで、水平スクロールするコードを紹介します。

;ツイートデック
#If WinActive("TweetDeck")
   ;マウスのサイドボタン(進む)+ホイール下回転で右に動かす
   ~XButton1 & WheelUp::
   MouseGetPos,,,id, fcontrol,1
   Loop 2			;数字を大きくすると速くなる
   SendMessage, 0x114, 0, 0, %fcontrol%, ahk_id %id%
   Return

   ;マウスのサイドボタン(進む)+ホイール上回転で左に動かす
   ~XButton1 & WheelDown::
   MouseGetPos,,,id, fcontrol,1
   Loop 2			;数字を大きくすると速くなる
   SendMessage, 0x114, 1, 0, %fcontrol%, ahk_id %id%
   Return

#If

複数ウィンドウを対象にする

以下の記事を参考にしてみてください。

同じキーを押す度に、機能を切り替える

Flag += 1」を使うことで、同じキーを押すたびに、機能を切り替えることができます。詳しくは、下記記事を参考にしてみてください。

冒頭に書くと便利なおまじないコード

以下の3行を冒頭に書いておくと良いそうです。

;おまじないコード。とりあえず、書いておくと便利コード
#SingleInstance, Force
SendMode Input
SetWorkingDir, %A_ScriptDir%

1行目の「SingleInstance, Force」はあると便利なので、最初に記述しておきましょう。

既にスクリプトが起動している状態で、同じスクリプトを実行した時に、自動で既存のスクリプトを終了するよという意味です。スクリプトをリロードする時に、以下の確認画面が表示されなくなります。

「既に同じスクリプトが実行されています。上書きで起動しますか?」メッセージダイアログ画像
意味:既に同じスクリプトが実行されています。上書きで起動しますか?

参考:AutoHotKeyの開発(デバッグ込)環境の構築手順 Qiita

感想

以上、スクリプトを記述して、キーに別の機能を割り当てるソフト「AutoHotkey(オートホットキー)」についてでした。

ぜひ、自分だけの最強環境を構築してみてください。

2021年12月29日AutoHotkey