AutoHotInterception で Ctrl と CapsLock を入れ替える

こんにちは masm11 です。

私は Ctrl キーを A の左に設定して使っています。

ゲーミングノート PC (Windows) でもそうしたいのですが、 いろいろシガラミがあり、 AutoHotInterception を使うことにしました。

インストール・設定方法がちょっと複雑だったので、 ここにそのやり方を残します。

AutoHotKey

まず AutoHotKey v2 をインストールします。 v1 と v2 では後で使うスクリプトの文法が少し違います。 v2 の方が新しいので、ここでは v2 を使います。

ここから、Latest Installer をダウンロードして インストールします。

interception driver

interception driver をインストールします。 これはドライバです。

ここ から Interception.zip をダウンロードします。 これを展開して、端末で、その中にある install-interception.exe を実行します。

install-interception.exe /install

これでインストールされるので、Windows を再起動して反映させます。

AutoHotInterception

AutoHotInterception をダウンロードします。 AutoHotInterception はここにあります。

AutoHotInterception.zip の中から AHK v2 を展開してどこかに配置します。

AutoHotInterception.zip から Common/lib/AutoHotInterception.dll を取り出して、 AHK v2/lib/ にコピーします。

Interception.zip の中の library/ に x86/ や x64/ がありますので、 これらを AHK v2/lib/ 中の該当ディレクトリにコピーします。

ここまでで AHK v2/ の中は、だいたい↓こんな感じになると思います。

  • Monitor.ahk
  • ...
  • Lib
    • AutoHotInterception.ahk
    • AutoHotInterception.dll
    • CLR.ahk
    • Unblocker.ps1
    • ...
    • x86
      • interception.dll
      • interception.lib
    • x64
      • interception.dll
      • interception.lib

Unblocker.ps1 を管理者権限で実行する、とドキュメントにはあるのですが、 よくわからないので、代わりに、各 dll のプロパティを開いて、 「ダウンロードしたファイルだから云々」の許可にチェックを入れます。

スクリプトを設置

Monitor.ahk をダブルクリックしてみます。 すると、キーボードやマウスの一覧が表示されます。 ここで、全てのキーボードにチェックを入れて、本体キーボードのキーを叩くと、 そのキーの情報が表示されます。 その ID の Handle を見つけておきます。 以下のスクリーンショットの場合、ID が 1 なので、Handle は ACPI\VEN_IDEA&DEV_0102 ですね。

AHK v2/ の中に、以下の内容で ctrlcaps.ahk 等という名前のファイルを作ります。

#Requires AutoHotkey v2.0
#include Lib\AutoHotInterception.ahk ; ライブラリを読み込む
Persistent

AHI := AutoHotInterception()

; 内蔵キーボードの Handle を指定(Monitor.ahk で調べたもの)
targetHandlePart := "ACPI\VEN_IDEA&DEV_0102"
laptopId := AHI.GetKeyboardIdFromHandle(targetHandlePart)

if (laptopId == 0) {
    MsgBox "内蔵キーボードが見つかりませんでした。ハンドル名を確認してください。"
    ExitApp
}

; MsgBox "laptopId " laptopId


iflock(state) {
    if (state) {
        Send("{Blind}{Ctrl down}")
    } else {
        Send("{Blind}{Ctrl up}")
    }
}

ifctrl(state) {
    if (state) {
        Send("{Blind}{CapsLock down}")
    } else {
        Send("{Blind}{CapsLock up}")
    }
}

AHI.SubscribeKey(laptopId, GetKeySC("CapsLock"), true, iflock)
AHI.SubscribeKey(laptopId, GetKeySC("Ctrl"), true, ifctrl)

; MsgBox "AutoHotkey " A_AhkVersion " が起動しました。"

targetHandlePart := の後ろを、先程見つけておいた Handle で置き換えます。

ctrlcaps.ahk をダブルクリックすると、本体キーのみ、ctrl と capslock が入れ替わっているはずです。

上記のスクリプトが何をやっているかは、まぁ読めばなんとなく解ると思います。

スタートアップに設定

Win+R を押して shell:startup と入力してスタートアップを開きます。 ここに、ctrlcaps.ahk へのショートカットを置きます。

Windows を再起動して、動作を確認します。 ただし、起動するまで少し時間がかかるので、注意です。

さいごに

interception driver を使ってごにょごにょやるのが AutoHotInterception で、 文法等ベースが AutoHotKey という感じですかね。

interception driver のインストール時には UAC の確認が入りますが、 使う時には確認されません。楽でいいですね。