AutoHotkeyでキー入力をカスタマイズ

AutoHotkey

前回HTPC用に最適なリモコン探しの記事でPC用リモコンについての話を掲載しましたが、今回はそのPC用リモコンのボタンをAutoHotkeyを使用してユーザ好みにカスタマイズする話となります。勿論リモコンだけでなく通常のキーボードのキーのカスタマイズも可能ですが、筆者の知識はうる覚え程度なので高度な事を目的としている場合は参考にならないと思われます。

まずAutoHotkeyについてですが、キーボードやマウスの入力を自由に別の入力に割り当てる事が出来るオープンソースのソフトウェアです。単純なキーの入れ替えといった事も出来ますが、1つのキーに対して装飾キーとの組み合わせによるショートカットキー(ホットキー)を割り当てたり、プログラムを起動させるといった事まで出来ます。

但しAutoHotkeyをどのように動作させるかの命令は、自身でコードを記述する必要がある為、思い通りに動かすにはかなりハードルの高いソフトだと言えます。筆者はバージョン1系の方を一時期使用していたのですが、バージョン2以降は記述方法も大幅に変わり余計に難しく感じています。ただ最低限AutoHotkeyでやりたい事は実現出来たので、バージョン2を基準にそれらの情報を下に記載していきます。

AutoHotkey ダウンロードと準備

AutoHotkey公式サイトのトップページから「Download」ボタンをクリックするとバージョン2と1のボタンが表示されますが、その下に小さく記載されている「Other Versions」から通常のインストーラ以外にZIPで配布されているAutoHotkeyも配布されているダウンロードページが表示されます。これから使用するなら旧バージョンの1では無く2を、インストーラ版とZIP版のどちらを選ぶかは好みですが筆者は展開後に即使用出来るZIP版の方を使用しています。

AutoHotkey ダウンロード

インストール完了後、もしくは圧縮ファイルを展開して任意の場所に移動後、実行ファイルを起動しようとしてもエラー画面が表示されて何も起こりません。そこでまずテキストエディタで空の状態で良いので適当な名前と「.ahk」の拡張子を付けて保存しておきます。とりあえずここでは「test.ahk」という名前にしましたが、インストーラ版の場合は自動でAutoHotkeyと関連付けされている筈です。

ZIP版の場合は自身でAutoHotkeyと.ahkファイルを関連付けしておく必要があります。作成した.ahkファイルを右クリックして「プロパティ」を選択、プログラムの種類の欄の「変更」からAutoHotkeyを選択して「既定値を設定する」ボタンで既定のアプリにします。

AutoHotkeyへの関連付け

AutoHotkeyがリストに出ていない場合は1番下までスクロールして「PCでアプリを選択する」から「AutoHotkey64.exe」を選択します。

AutoHotkeyでキー入力を変更する

まずはかなり初歩の部分から始めていきます。.ahkファイルをテキストエディタで開き以下のように記述して保存して下さい。因みに保存の際の文字コードはUTF-8にします。保存した.ahkファイルをダブルクリックで実行するとタスクトレイに最小化されて起動します。

F1::a	;F1キーでaを入力

大体見たら分かると思いますがF1という記述の後に2つのコロンを挟んでaと記述する事でF1キーを押した時にaが入力されるようになります。因みにセミコロンの後はコメントアウトになり直接影響を及ぼさない為、メモなどを記入しますが無くても構いません。

因みに.ahkファイルを編集して保存後は、AutoHotkeyのタスクトレイアイコンを右クリックしてメニューにある「Reload Script」から編集内容を再読み込みさせる事が出来ます。

AutoHotkeyのトレイアイコンメニュー

今度は「Send」コマンドを使ってみます。F2::abcのように記述してもエラーになるので、そのような場合に「Send」コマンドを使ってダブルクォーテーションで囲みます。

F2::Send "abc"	;F2キーでabcを入力

TabキーやEnterキー、Backspaceキーなどはそのまま記述してもTabという文字で入力されるだけなので、括弧で囲んで記述する事でキーとして入力出来ます。

F3::Send "{Tab}"	;F3キーでTabキーを入力

下はEscapeキーを押した時にAltキーとF4キーの同時押しによるWindowsのショートカットキーを実行する記述となっています。

Escape::!F4	;Escキーでウィンドウを閉じるショートカットキーを実行

ControlキーやShiftキー、Altキー、Windowsキーといった装飾キーを使ったショートカットキーは、記号を使って記述する事が出来ます。

Controlキー^
Shiftキー+
Altキー!
Windowsキー#

キー名を調べる方法

キーボードのキーの中には正確な名前の分からないキーもありますよね。例えばプリントスクリーンキーは「PrintScreen」と記述する必要があり、音量アップのキーは「Volume_Up」と記述しますが、AutoHotkeyにはこれらのキー名を調べる手段が用意されています。

AutoHotkeyのタスクトレイアイコンをダブルクリック、もしくは右クリックメニューから「Open」を選択して画面を表示。メニューにある「View」から「Key history and script info」を選択。

AutoHotkeyの画面

この画面が表示されている状態でキー名を調べたいキーを実際に押します。その後、F5キーかメニューの「View」にある「Refresh」で更新すると押したキーに対する仮想キーコードやスキャンコードと同時に「Key」の列にキー名が表示されます。

Key history and script info

PC用リモコンの中には全く何のキーが割り当てられているのか見当が付かないボタンが幾つかありますが、そのような場合にも上の方法でキー名を調べる事が出来ます。因みに下の写真のリモコンのボタンには「AppsKey」が割り当てられていました。

PC用リモコンのボタン

他、キーボードには無いキーを割り当てるのにキー名を知りたいという場合もあると思いますが、その場合はAutoHotkey on GitHubキーリストのページから調べると便利です。

ウィンドウのクラス名やプロセス名を調べる

AutoHotkeyでは特定のソフトのウィンドウのクラス名やプロセス名を使って条件を設定する事が出来るのですが、これらクラス名やプロセス名を調べ方法にWindow Spyを使用します。Window Spyの起動はタスクトレイアイコンを右クリックしてメニューにある「Window Spy」を選択。

Window Spyが起動したらクラス名やプロセス名を調べたいソフトのウィンドウをマウスポインタでクリックしてアクティブにしておくと画面にウィンドウタイトル、クラス名、プロセス名、プロセスID、ウィンドウIDの順に表示されます。これらをコピーしておけばクラス名やプロセス名を使って特定のソフトが起動している時のみ有効といった条件の記述に使用出来ます。

Window Spy

条件付きでキー入力を変更する

AutoHotkeyでは上で説明したクラス名やプロセス名を使って特定のソフトのウィンドウがアクティブな時のみ、起動している時のみ、逆にアクティブじゃない時のみ、起動していない時のみといった条件を設定してキーのカスタマイズを行う事が出来ます。

下は「HotIf WinActive」を使用してアクティブな時のみという条件を指定しています。その後にはWindow Spyを使って調べたクラス名を記述。その下に条件を満たしている場合にどうするかを記述しています。

#HotIf WinActive("ahk_class TTeraPadMainForm")	;TeraPadがアクティブ状態の場合
F1::a	;F1キーでaを入力
F2::b	;F2キーでbを入力

条件には「HotIf WinActive」の他、「HotIf WinExist」で起動している時という指定も出来ますが、下のように「HotIf not WinExist」と記述すれば逆に起動していない時と指定する事も出来ます。また、「Run」を使う事でパスを記述してプログラムやフォルダを起動させる事も可能です。

#HotIf not WinExist("ahk_class MPC-BE")	;MPC-BEが起動していない場合
Media_Play_Pause::Run "C:\Users\admin\soft\mpc\mpc-be64.exe"	;再生/一時停止キーでMPC-BEを起動

#HotIf WinActiveといった条件を使うとそれ以降の記述に全て条件が適用されるので、条件を終了させる場合は「#HotIf」と記述しておきます。

条件によって分岐させる

AutoHotkeyでは同じキーで条件によって分岐させ、異なる命令を実行させる事も出来ます。下では「If」を使い条件に当てはまった場合と、「Else」以降で当てはまらなかった場合に異なる動作を指定しています。

F3::	;F3キーを押した時
{
If WinExist("ahk_class MPC-BE")	;MPC-BEが起動している場合
Send "{Media_Play_Pause}"	;再生/一時停止を入力
Else	;それ以外の時
Run "C:\Users\admin\Videos"	;ビデオフォルダを起動
}

ここから下は完全に筆者の知識では理解出来ていない部分となりますが、様々なネット上の情報を元に記述した内容となっています。特にゆきんこの勉強法さんのAutoHotkey V2.1|コード用例を参考というより、ほぼコピペしています。

下の記述はキーを長押しした場合とそれ以外の場合、つまりは通常通り短押しした場合とで実行する命令を分岐させています。上で書いた通り記述内容は全く理解出来ていませんが、AutoHotkey V2.1|コード用例では更にキーの2度押しを加えた3分岐の記述があります。

F4::	;F4キーを押した時
{
key := "F4"
ErrorLevel := !KeyWait(key, "T0.3")	;長押しした時
If(ErrorLevel)
{
Run "C:\Users\admin\Music"	;ミュージックフォルダを起動
ErrorLevel := !KeyWait(key)
Return
}
Else	;それ以外の時(短押し)
{
Run "C:\Users\admin\Videos"	;ビデオフォルダを起動
}
}

上と同じく下の記述は長押しした場合と短押しした場合とで分岐させていますが、短押しの方を条件によって更に分岐させています。

F6::	;F6キーを押した時
{
key := "F6"
ErrorLevel := !KeyWait(key, "T0.3")	;長押しした時
If(ErrorLevel)
{
Run "C:\Users\admin\Music"	;ミュージックフォルダを起動
ErrorLevel := !KeyWait(key)
Return
}
Else	;それ以外の時(短押し)
{
{
If WinExist("ahk_class MPC-BE")	;MPC-BEが起動している場合
Send "{Media_Play_Pause}"	;再生/一時停止を入力
Else	;それ以外の時
Run "C:\Users\admin\Videos"	;ビデオフォルダを起動
}
}
}

AutoHotkey 纏め

とりあえず筆者がAutoHotkeyで使えている範囲の内容を書きましたが、まだ幾つかやりたい事で実現出来ていない部分もあるので現在もボチボチ勉強中です。ただ冒頭の方で書いた通りPC用リモコンのボタンをカスタマイズする目的でAutoHotkeyを使用しているのですが、普段はHTPCの殆どの操作をリモコンで出来るようになったので現状でもそこそこ満足はしています。

PC用リモコンのボタンには限りがあるので、条件によって分岐させて1つのボタンで複数の命令を実行出来るように設定すると、ボタンの不足を賄う事が出来ます。例えば再生/一時停止や前のトラック、次のトラックといったボタンはメディアプレイヤーを起動していない時には何の機能も果たしていないので、これらのボタンにメディアプレイヤーが起動していない条件下でソフトウェアを起動させる機能を割り当てておくといった使い方が便利です。

コメント

タイトルとURLをコピーしました