Windowsの海外の面白そうなハードってUS配列ですよね。
US配列とJIS配列を併用しているとキー入力の間違いが多発してしまいます。
ちょっといいJIS配列のキーボードを買ってしまったので、なんとか「内蔵USで外部JISをJIS配列で使う」方法を試行錯誤してみました。
その最終結果をまとめておきます。
AutoHotkey をインストール
AutoHotkey
Free keyboard macro program. Supports hotkeys for keyboard, mouse, and joystick. Can expand abbreviations as you type them (AutoText).
Windowsでキーボード関係を弄るなら必須ソフトですよね。
AutoHotkey の設定
usjis_toggle.ahk
#Requires AutoHotkey v2.0
#SingleInstance Force
;==================================================
; 状態(起動時の配列)と切り替え
;==================================================
JIS := true ; true=JIS / false=US(起動時)
Show(msg) => TrayTip("Symbol layout (IME=JP)", msg, 500)
SetMode(state) {
global JIS
JIS := state
Show(JIS ? "JIS" : "US") ; トースト表示
}
^!k:: SetMode(!JIS) ; Ctrl+Alt+K:JIS/USトグル
^!j:: SetMode(true) ; Ctrl+Alt+J:JIS固定
^!u:: SetMode(false) ; Ctrl+Alt+U:US固定
;==================================================
; キー送信ヘルパ(IMEの未確定に載せる・Shift制御一元化)
; reqShift: -1=現状維持 / 0=Shiftなし / 1=Shiftあり
;==================================================
SendSc(sc, reqShift := -1) {
had := GetKeyState("Shift","P")
if (reqShift = 1 && !had) {
Send("{Shift down}{" sc "}{Shift up}")
} else if (reqShift = 0 && had) {
Send("{Shift up}{" sc "}{Shift down}")
} else {
Send("{Blind}{" sc "}")
}
}
;==================================================
; JIS時のみ有効にするマッピング
;==================================================
#HotIf JIS && !GetKeyState("Ctrl","P") && !GetKeyState("Alt","P")
;--- 数字列(Shift記号:6〜0) ---
$*+sc003:: SendSc("sc028", -1) ; Shift+2 → "(US: sc028+Shift)
$*+sc007:: SendSc("sc008", -1) ; Shift+6 → &(US: 7+Shift)
$*+sc008:: SendSc("sc028", 0) ; Shift+7 → '(US: Quote)
$*+sc009:: SendSc("sc00A", -1) ; Shift+8 → ((US: 9+Shift)
$*+sc00A:: SendSc("sc00B", -1) ; Shift+9 → )(US: 0+Shift)
$*+sc00B:: SendSc("sc00B", 0) ; Shift+0 → 0(JISは記号なし)
;--- - / = ---
$*sc00C:: SendSc("sc00C", 0) ; - (Minus)
$*+sc00C:: SendSc("sc00D", 0) ; Shift+Minus → =
$*sc00D:: SendSc("sc007", 1) ; = → ^ (6+Shift)
$*+sc00D:: SendSc("sc029", -1) ; Shift+= → ~ (`+Shift)
;--- 角括弧 ---
$*sc01A:: SendSc("sc003", 1) ; [ → @ (2+Shift)
$*+sc01A:: SendSc("sc029", 0) ; { → ` (` 単体)
$*sc01B:: SendSc("sc01A", 0) ; ] → [
$*+sc01B:: SendSc("sc01A", -1) ; } → {
;--- セミコロン/クオート ---
$*sc027:: SendSc("vkBA", 0) ; ; → ;
$*+sc027:: SendSc("sc00D", -1) ; : → + (=+Shift)
$*sc028:: SendSc("vkBA", 1) ; ' → : (; にShift)
$*+sc028:: SendSc("sc009", -1) ; " → * (8にShift)
;--- Yen(JIS ¥|キー) ---
$*sc07D:: SendSc("sc02B", 0) ; ¥(実体は \ )
$*+sc07D:: SendSc("sc02B", -1) ; |
;--- ろ キー ---
$*sc073:: SendSc("sc02B", 0) ; ろ → \
$*+sc073:: SendSc("sc00C", -1) ; Shift+ろ → _(- にShift)
;--- K42(sc02B が ]/} として動作) ---
$*sc02B:: SendSc("sc01B", 0) ; ]
$*+sc02B:: SendSc("sc01B", -1) ; }
#HotIf
設定の解説
- 普通、Windowsでキーボード配列を変更すると再起動が必要ですが、US配列のままJIS配列キーボードのキートップの表記の記号になるように変換して出力しています。
- 設定ファイルで起動すると、JIS配列モードになります。US配列モードにも切替えられるようにしています。
- Ctrl+Alt+J:JIS配列モード
- Ctrl+Alt+U:US配列モード
- Ctrl+Alt+K:JIS⇔US配列トグル切替え
- JIS配列モードの時にのみJIS配列のキーボード表記の出力になるように変換しています。
- SendScでキーコード出力を一元化
- シフト状況を指定できるようにしている。(シフト押下時にシフトを再送しない)
コメント