【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」をクリックします。
どちらのバージョンを利用するか選択します。
2022年12月21日までは、「1.1」が安定版で、「2.0」がベータ版だったので、基本的には「1.1」を選んでおけば問題ありませんでした。しかし、2022年12月21日から「2.0」が正式にアップデートしました。これにより、どちらがいいか悩みます。
調べてみると、どうやら新しいバージョンは、これまでのAutoHotKeyコードと構造が異なるせいで、後方互換性がないようです。(詳しくはこちらのサイト様参考)
僕は、「1.1」から利用していたので、今すぐに移行して、コード全部書き直し…となると、ちょっとめんどくさいです。そこで、本記事は、「1.1」で解説したいと思います。ただし、今後移行する可能性も十分にあります。
ダウンロードが完了したら、起動します。
こだわりがない場合、「Express Installation」をクリックします。
すぐインストールが終わるので、「Exit(終了)」をクリックします。インストールは完了です。
使い方
流れは、スクリプトの記述→実行の2ステップです。実行は、作成したファイルを起動するだけなので、メインの作業はスクリプトの記述になります。
AHKは独自の言語なので、一から学んでいきます。本ソフトは、ソフトで色々設定していくタイプではなく、テキストエディタ(Windows標準のメモ帳、Microsoftが提供しているVisual Studio Codeなど)から書き込んで作成するタイプです。
スクリプトの作成
デスクトップ、またはフォルダー内の空いているところを右クリック→新規作成→「Autohotkey Script」をクリックします。
専用の拡張子「.ahk
」ファイルができるので、好きな名前を決めます。日本語でも英語でもOKです。右クリック→「プログラムから開く」から、好きなテキストエディターで開きます。Windows標準ならメモ帳です。
僕は、Microsoftが提供している無料のコードエディターソフト「Visual Studio Code(ビジュアル・スタジオ・コード)」を利用しています。
プラグインを導入して、ハイライト表示にすることで、コードが一気に見やすくなります。自動保存機能もあるので、いちいち保存する手間が省けます。
Macはよく分かりませんが、Windowsでコードエディターをするなら、コレ!ってくらい有名だと思います。
メモ帳が開くので、スクリプトを記述していきます。最初に4行ほどの英文が書かれていますが、気にしなくてOKです。削除しても削除しなくても正常に動作します。よく分からない場合は、そのまま残していた方がいいかなと思います。
記述
具体的にどうやってコードを書けばいいのかは、こちらで詳しく解説します。本項目では、とりあえず基本の形を紹介します。以下のコードをコピペで貼り付けてみましょう。キーボードのaをbに割り当てるコードです。
;aキーをbキーに割り当て
a::b
Ctrl+S、またはメモ帳上部のファイル→「上書き保存」をクリックします。保存できたら、メモ帳を「×」で閉じてOKです。後でまた書き込む場合は、そのままでOKです。
実行
コードを記述しただけだと、意味がありません。スクリプトを実行する必要があります。起動している間は、コードが有効になります。自分の好きなタイミングでオンオフできる点も便利ですね。
作成したスクリプトを右クリック→「Run Script」をクリックします。ダブルクリックでも起動できます。
タスクトレイ(通知領域)に、が表示されます。
余談ですが、「AutoHotKey」のタスクトレイアイコンは、好きなように変更できます。まぁ、最初のうちはこだわらなくてOKです。とりあえず、そういうこともできるという知識の紹介です。
エラーが出た場合は、コードの記述に間違いがあるので、もう一度見直しましょう。適当にメモ帳を開いて、キーボードのaを押すと、bが入力されます。
終了
タスクトレイのAHKアイコンを右クリック→「Exit」をクリックします。
スタートアップに登録する方法
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を押しながら)入力時は、割り当てたキーが実行されます。
矢印は、「Left、Right、Up、Down」や、「←、→、↑、↓(変換元のみ)」で指定できます。
InsertやDelete、その他のキーについては、公式サイトを参考にしてみましょう。
上記サイトにアクセスすると、キーボードが表示されるので、登録したいキーをクリックします。
ページがスクロールして、目的のキーが表示されます。コピペしましょう。
スキャンコード(SC)
通常のキー指定だと、エラーがでちゃう、うまく動作しない場合は、スキャンコードで指定しましょう。
スキャンコードとは、キーボードを押した時にCPU(パソコンの頭脳)に伝達されるコードのことです。
キーボードは、Aを押した時に、そのままAが送られるわけではありません。sc01Eといったように特殊なコードに置き換えられてCPUに送られています。目に見えない第二のキーボードって感じです。
「sc〇〇〇
」といったように、頭文字が「sc(スキャンコード)」で始まります。調べる方法はいくつかありますが、先人たちが残したものがあるので、そのままコピペするのが一番楽です。
下記サイトにスキャンコードの一覧があります。
以下のような書き方です。
;数字の「1」をWindowsに割り当て
sc002::sc15B
仮想キー(VK)
スキャンコードと同じで目に見えないキーボードです。キーボードには、それぞれ16進数の数字が割り当てられています。キーを識別するためです。これが仮想キーです。
通常キーとスキャンコードさえ覚えておけば、全てのキーをカバーできるので、仮想キーを無理に理解する必要はありません。まずは通常キー、スキャンコード、修飾キーを使えるようになりましょう。
「VK
」で始まるのが特徴です。本記事では、頭がこんがらがるだけだと判断し、詳しくは説明しません。今後記載するコードも仮想キー以外で記述します。
;セミコロンを数字の「0」に割り当て
vkBB::vk30
参考:代表的な仮想キーコード一覧 – BizRobo! ナレッジベース
修飾キー
Ctrl、Shift、Alt、Windowsなどの単体では機能しないキーのことです。(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
WindowsやAltなどの修飾キー以外のキーを組み合わせる場合は「&」を使います。&の前後には、半角空白を入れます。こうしないと動作しません。注意点ですが、上記コードだと単体キーのaが機能しなくなります。
単一キーも有効にするには、以下のようにします。
;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
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のインストール場所を開きます。デフォルトでは以下の場所に保存されています。
C:\Program Files\AutoHotkey
AutoHotKeyフォルダー内の「WindowSpy.ahk
」をダブルクリックします。これで同じように起動できます。
頻繁に使う方は、右クリック→「ショートカットの作成」で、デスクトップなどの好きな場所に配置しておくといいかもしれません。
「Window Spy」ウィンドウを起動できたら、名前を調べたいウィンドウをクリックします。
Window Spy内に、ウィンドウの情報が表示されます。重要なのは、上から数行です。
以下のような構成になっています。
新しいタブ – 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」だと認識してくれません。
「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日記」ですね。
「ここにコードを書いていく」の部分に、実装したいコードを書きます。例として、ツイートデックで、マウスのサイドボタン+ホイールで、水平スクロールするコードを紹介します。
;ツイートデック
#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(オートホットキー)」についてでした。
ぜひ、自分だけの最強環境を構築してみてください。