作業環境のカスタムキーマップ
AutoHotkeyとChangeKeyを用いて、作業環境のキーマップを変更している。
備忘録として本記事を記載する。
環境
項目 | 内容・バージョン |
---|---|
OS | Windows10 Professional |
AutoHotkey | v2.0.18 |
ChangeKey | v1.50 |
CustomKeyMap
ChangeKeyの設定
入力 | 出力 |
---|---|
CapsLock | 右Ctrl |
AutoHotkeyの設定
AutoHotkeyで以下のキーマップを設定している。
(以下はChangeKeyで設定した内容も含んだ全てのキーマップ一覧)
スクリプト
CustomKeyMap.ahk
InstallKeybdHook
#UseHook
;[無変換]+[I] → [↑]
vk1D & i::Send "{Up}"
;[無変換]+[J] → [←]
vk1D & j::Send "{Left}"
;[無変換]+[K] → [↓]
vk1D & k::Send "{Down}"
;[無変換]+[L] → [→]
vk1D & l::Send "{Right}"
;[無変換]+[Space] → [Enter]
vk1D & Space::Send "{Enter}"
;[無変換]+[h] → [BackSpace]
vk1D & h::Send "{Backspace}"
;[無変換]+[M] → [Win]+[Shift]+[←]:ウインドウをモニター間移動
vk1D & m::Send "{RWin Down}{Shift Down}{left}{Shift Up}{RWin Up}"
;[無変換]+[変換] → [Win]+[Shift]+[S]:指定した領域を画面コピー
vk1D & vk1C::Send "{RWin Down}{Shift Down}{s Down}{RWin Up}{Shift Up}{s Up}"
;[無変換]+[U] → [Ctrl]+[Alt]+[Tab]:ウインドウの切り替え
vk1D & u::Send "{Ctrl Down}{Alt Down}{Tab Down}{Ctrl Up}{Alt Up}{Tab Up}"
;[無変換]+[1] → [F1]
vk1D & 1::Send "{F1}"
;[無変換]+[2] → [F2]
vk1D & 2::Send "{F2}"
;[無変換]+[3] → [F3]
vk1D & 3::Send "{F3}"
;[無変換]+[4] → [F4]
vk1D & 4::Send "{F4}"
;[無変換]+[5] → [F5]
vk1D & 5::Send "{F5}"
;[無変換]+[6] → [F6]
vk1D & 6::Send "{F6}"
;[無変換]+[7] → [F7]
vk1D & 7::Send "{F7}"
;[無変換]+[8] → [F8]
vk1D & 8::Send "{F8}"
;[無変換]+[9] → [F9]
vk1D & 9::Send "{F9}"
;[無変換]+[0] → [F10]
vk1D & 0::Send "{F10}"
;[無変換]+[-] → [F11]
vk1D & -::Send "{F11}"
;[無変換]+[^] → [F12]
vk1D & ^::Send "{F12}"
;タイムスタンプ機能
;[無変換]+[I] → タイムスタンプ(YYYYMMDD )を入力する
vk1D & d::
{
TimeString := FormatTime(,"yyyyMMdd ")
Send TimeString
}
;[変換] → IME On/Off
vk1C::Send "{vkF3}"
;[Ctrl]+[Space] → IME On/Off
Ctrl & Space::Send "{vkF3}"
;Sands機能
; Spaceキーを押下した状態で他のキーを押下した場合、SpaceキーをShiftキーとして機能させる。
; Spaceキー単体で押下した場合にはSpaceキーとして動作させる。
press := 0 ; スペースキーを押しているかどうか。
shifted := 0 ; スペースキー押下中に何かの印字可能文字を押したかどうか。
pressedAt := 0 ; スペースキーを押した時間(msec)。
timeout := 300 ; pressedAt からこの時間が経過したら、もはや離したときにもスペースを発射しない。
hook := InputHook() ; スペースキー押下中に何かの印字可能文字を押したかどうか捕捉するフック。
$*Space:: {
global
SendInput "{Shift Down}"
if (press = 1) {
return
}
shifted := 0
press := 1
pressedAt := A_TickCount
; 何かのキーが押されたことを検知する
; L1 はフックする文字数の上限を 1 にする
; V はフックした入力をブロックしない
; デフォルトで印字可能文字のみフックされる
hook := InputHook("L1 V")
; 一文字待機し、待機中にスペースを離したとき以外、
; シフト済みにする
hook.Start()
if (hook.Wait() != "Stopped") {
shifted := 1
}
}
$*Space up:: {
global
SendInput "{Shift Up}"
press := 0
; 待機キャンセル
hook.Stop()
; 一定時間経過していたらスペースを発射しない
if (A_TickCount - pressedAt > timeout) {
return
}
; シフト済みでなければスペースを発射する
; 先に押してあるモディファイアキーと組み合わせられるように {Blind} をつける
if (shifted == 0) {
SendInput "{Blind}{Space}"
}
}
; スペース押しっぱなしが欲しいときのために RShift で代用する
$RShift::Space