こんにちは 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 の確認が入りますが、 使う時には確認されません。楽でいいですね。