PCのキーマップも自由自在♪
~「AutoHotkey」のご紹介~


PCのキーを任意のものに置き換える、「リマッパー」と呼ばれるアプリ。

以前に本サイトでもリマップ機能を搭載したアプリ「Microsoft Power Toys」についてご紹介したことがありましたが、そんなPower Toys含め多くの外部アプリでは一部または全部のリマップによりスクリーンリーダー独自のキーマップを破損させ、正常な操作が行えなくなってしまうという弱点があります。

そんな中、まるでスクリプトやプログラムのように自由に設定を書き出し適用できるだけでなく、そのまま環境による影響を受けないEXEファイルの形でコンパイルすることまでできてしまう便利なツール、「Autohotkey」ではスクリーンリーダーとの相性も良いという特徴を併せ持っているということが最近わかってきました。

そこで、LUCA自身まだ初心者ではありますが、今回はAutoHotkeyの概要・特徴と、簡単なスクリプトの書き方まで合わせてご紹介していきたいと思います。

⌃今回もご紹介しているアプリについてはスクリーンリーダー(NVDA)で操作できることを確認してから掲載しています。


テーブルの上に座り、前足をラップトップPCのキーボードに乗せている茶トラ猫のAI写真。猫は楽しそうに口を開け、小さな牙をのぞかせています。

アプリ情報

それではまずアプリ情報から。なお、本記事では導入が楽なMicrosoft Storeバージョンを扱います。

○アプリ名:
AutoHotkey v2 Store Edition
○ダウンロードリンク:
Microsoft Storeからダウンロード
○価格:
無料(アプリ内課金なし)
○開発者:
・AutoHotkey本体: Chris Mallett 他
・Store版: Descolada(公式チーム公認)
○概要:
・キーボード操作により実行されるプログラムを容易に記述できるよう開発されたスクリプト言語
・各種キーのリマップ、独自のホットキー設定、修飾キーの挙動変更など幅広いカスタマイズに対応
・未インストール環境でも実行できるEXE形式のアプリへコンパイルすることが可能

少し短めではありますが、アプリ情報については以上です。

簡単に言うとキーボードから実行できるプログラムを書くためのツールのようなもので、キーの組み合わせ・出力によって無限大に設定を追加していけるものということになります。


スクリプトの基本

AutoHotkeyはスクリプト言語なので、機能を追加・実行するためにはその指示を記述したスクリプトファイルが必要です。

AutoHotkeyのスクリプトファイルは「.ahk」という拡張子のテキストファイルで、アプリ起動後のメイン画面から「New script」を選択すること、または新規テキストファイルを作成してから拡張子を「ahk」に変えることで作成できます。スクリーンリーダーユーザにとっては、後者の方法で作成するほうが操作しやすいかと思います。

そんなAHKスクリプトは、右クリックして開いたコンテキストメニューから「Edit Script」、または「プログラムから開く」⇒「メモ帳」を選択することで編集することができます。それ以外のエディタを使いたい場合には、必要に応じて選ぶアプリケーションを調整しましょう。

なお必ずしも記述しなければならないものではありませんが、スクリプトの冒頭には下記のディレクティブ(AutoHotkeyへの指示)を指定するとエラーが起こりにくくなるのでお勧めです。

○「#Requires AutoHotkey v2.0」
・AutoHotkeyの旧バージョンであるV1系ではなく、V2系で書かれていることを明示する
・誤ってV1で実行された場合には警告を表示して停止してくれる
○「#SingleInstance Force」
・同じスクリプトを再度実行する場合、既に実行中のものを終了してくれる
・調整とテストを繰り返す場合など、毎回タスクトレイから該当のスクリプトを選択し「編集」や「一時停止」を選ばなくても済むようになる
○「#Warn」
・エラーに繋がる可能性の高い箇所を通知してくれる

記述し終えたAHKファイルはAutoHotkeyがインストールされている端末では、通常通りダブルクリック/Enterキーで実行することができます。また意図的に表示をオフにしていない限り、スクリプトの一時停止・終了・編集などはタスクトレイアイコンを右クリックすることで行えるようになっています。

スクリプトを右クリックして「Compile script」を選択するとAutoHotkey未インストール環境でも実行できるEXE形式のアプリケーションにコンパイルすることもできるので、共有したい時にはこちらを活用しましょう。

AHKスクリプトの基本については以上です。

次項から本題、AHKスクリプトの書き方についてご紹介します。


各種スクリプトの書き方

AHKは一般的なプログラミング言語ほどではないものの、簡単には説明しきれないほどの記述方法・テクニックがあるため、本項ではキー・ホットキーのリマップに関わる、一般的な記述方法についてのみピックアップしてご紹介します。

~一般的なキーのリマップ~

まずはあるキーを他の任意のキーに割り振りたい場合に使える、最も基本的な書き方です。

なお「#」で始まる行は前項でもご紹介した、デフォルト設定を伝えるための「ディレクティブ」、「;」で始まる行は処理には一切影響を与えないコメントです。


#Requires AutoHotkey v2.0
#SingleInstance Force

; かな変換キー(SC070)をアプリケーションキーとして動かす
sc070::Send "{AppsKey}"

コメントにも書いている通り、上記はかな変換キーをアプリケーションキーに再割り当てしているものです。かな変換キーは「SC(スキャンコード)と呼ばれる一意な識別番号で指定しているのですが、このコードの調べ方については後述します。

また1つ注意点として、上記スクリプト内で使われている「send」という構文は「指定したキーを押してすぐに離す」という指示に当たるため、例えばAltなどの修飾キーとして、他のキーとの組み合わせに利用することはできません。

他のキーとの同時押しに使いたい場合は次にご紹介するキーダウン・キーアップのテクニックが必要となります。

~キーダウン・アップの個別操作~

キーダウン・キーアップ、つまり「キーを押し下げた」ことと「キーを離した」ことを別々に指定することで、より柔軟な指定が可能となります。

まずこちらの例では、右Ctrlキー非搭載のキーボードで右Altキーを代用するためのスクリプトです。


#Requires AutoHotkey v2.0
#SingleInstance Force

; 右Altキーを右Ctrlキーとして使う
; 押した瞬間にRCtrlを押下、離した瞬間にRCtrlを離す

*RAlt::
{
    Send "{RCtrl Down}"
}

*RAlt Up::
{
    Send "{RCtrl Up}"

最初にご紹介した「send」のみのパターンでは「キーを押しただけで割当先のキーがすぐに離されたことになる」ため修飾キーとしての利用ができない状況でしたが、このようにキーダウン・アップを個別に設定すると「キーを押し下げた」ことと「キーを離したこと」が割り当て元と割当先のキーで同期されるため、他のキーとの同時押し等にも対応できるんです。

なお注意点として、割り当て元であるRAlt(右Alt)の前には、「どのキーと押されても反応させる」ために「*」をつけて記述する必要があります。

またこのキーダウン・アップの処理は同時に組み合わせて使うこともできます。実は以前にダウンロード広場で公開した「Copilot2Ctrl.exe」もこのテクニックを使っていて、内部では下記のようなスクリプトになっていました。


#Requires AutoHotkey v2.0
#SingleInstance Force

; Copilotキー(内部ではShift+Win+F23)が押されたら...
<+<#F23::
{
    ; 元の Win/Shift を離して、右Ctrlを押しっぱなしにする
    Send "{Blind}{LShift Up}{LWin Up}{RControl Down}"
}

<+<#F23 Up::
{
    ; Copilotキーを離したら右Ctrlも離す
    Send "{RControl Up}"
}

スクリプト内で起きていることとしてはコメントの通りで、「Shiftキーを離す、Winキーを離す、Ctrlキーを押し下げるといった動作を同時に実行しているというものです。

なおF23の前に書かれている「<+<#」は各種修飾キーを表しているのですが、これについては次の項でご説明します。

~修飾キーの扱い~

ここまで何度か登場していますが、AHKではキーをリマップする際にCtrl/Alt/Win/Shiftなどの修飾キーを付加することができ、それぞれ下記の記号をキー名の前に着けることで指定することができます。

※例: ^cでCtrl+c、!+sでAlt+Shift+sなど

また左右の修飾キーを個別に利用したい場合、左側のキーであれば「<」、右側のキーであれば「>」を各修飾キーの記号に着けるだけです。例えば先ほどご紹介したCopilot2Ctrlのスクリプトで登場した「<+<#」は左Shift+左Winということになります。

下記はAlt+w/a/s/dでカーソルキーを使うためのスクリプトです。


#Requires AutoHotkey v2.0
#SingleInstance Force

!a::Send "{Left}"
!d::Send "{Right}"
!w::Send "{Up}"
!s::Send "{Down}"

~VK/SCコードの調べ方~

間に色々なスクリプト例を挟んでしまったため少し間が抜けてしまいましたが、続いてはVK/SCの調べ方についてです。

最初のスクリプトではかな変換キーをリマップする際「sc070」という数字を使っていたのですが、このようにキー名が割り当てられていない、特殊なキーを示すために使うのがVK(仮想キーコード)とSC(スキャンコード)です。

それぞれ「vk」や「sc」の後に特定の英数字を記載することで利用することができ、特に後者のSCは一意で他のキーとの重複がないため、確実に目的のキーを指示することができてとても使い勝手の良いものとなっています。

そんなVK/SCを調べるために使えるのが、下記のコードです。


#Requires AutoHotkey v2.0
#SingleInstance Force

; キーボードフックを強制的に入れる(ユーザーのキー入力も履歴に残すため)
InstallKeybdHook

; F8 を押すとキー履歴とスクリプト情報を表示
F8::KeyHistory()

; Esc で終了
Esc::ExitApp

こちらは「KeybdHook」というツールを使ってユーザの入力したキーの履歴を取得、キー名やVK、SC等の情報を表示してくれるスクリプトです。

AHKとして保存・実行後、調べたいキーを何度か押してからF8キーを押すと、キー履歴のウィンドウが開きます。その中から上下カーソルキーなどで最後に押されたキーを探し、押した回数と行数が合っていることを確認してから左からVK・SC・キー名の順に並んだ情報を確認しましょう。


まとめ

さて、今回はWindowsで自由にキーボード入力をカスタマイズすることのできるスクリプト言語、「AutoHotkey」についてご紹介しましたが、いかがだったでしょうか。

記事中ではシンプルで使いやすいスクリプト例のみを掲載していますが、複数キーの利用などより高度なカスタマイズも可能ですので、ぜひ一度お試しください。


*本ページの記載内容に誤りがあれば、メール、TwitterのDMなどでお知らせください。


メールお問い合わせ
Twitter: @naokiluca
↑ホームに戻る