カテゴリー
AutoHotKey キーボード配列

「変換」「無変換」キーを活用する

「変換」キー、または、「無変換」キーと同時に押した時に、
キーの役割を変更するように設定する。

「変換」キーを押している間は、以下のキーに変更する。

  • 記号キーを集めた。
  • 数字キーを1つ下の段に下げた。

「無変換」キーを押している間は、以下のキーに変更する。

  • 移動系のキーを集めた。
  • 矢印キーの配置はFPS(ゲーム)と同じ。
  • Ins,Del,Home,End,PgUp,PgDnの配置はフルサイズキーボードと同じ。
  • ファンクションキーを下に移動した。

これらのキー配列を実現するために、
AutoHotKeyのスクリプトコードを作った。

;muhenkan
sc07B & q::Send,{Blind}{Esc}
sc07B & e::Send,{Blind}{Up}
sc07B & r::Send,{Blind}{U+0020} ; Space
sc07B & y::Send,{Blind}{PrintScreen}
sc07B & u::Send,{Blind}{Insert}
sc07B & i::Send,{Blind}{Home}
sc07B & o::Send,{Blind}{PgUp}

sc07B & a::Send,{Blind}{Backspace}
sc07B & s::Send,{Blind}{Left}
sc07B & d::Send,{Blind}{Down}
sc07B & f::Send,{Blind}{Right}
sc07B & g::Send,{Blind}{Enter}
sc07B & h::Send,{Blind}{AppsKey}
sc07B & j::Send,{Blind}{Delete}
sc07B & k::Send,{Blind}{End}
sc07B & l::Send,{Blind}{PgDn}
sc07B & sc027::Send,{Blind}{Backspace}
sc07B & sc028::Send,{Blind}{F12}

sc07B & z::Send,{Blind}{F1}
sc07B & x::Send,{Blind}{F2}
sc07B & c::Send,{Blind}{F3}
sc07B & v::Send,{Blind}{F4}
sc07B & b::Send,{Blind}{F5}
sc07B & n::Send,{Blind}{F6}
sc07B & m::Send,{Blind}{F7}
sc07B & sc033::Send,{Blind}{F8}
sc07B & .::Send,{Blind}{F9}
sc07B & /::Send,{Blind}{F10}
sc07B & sc073::Send,{Blind}{F11}

;henkan
sc079 & q::Send,{Blind}1
sc079 & w::Send,{Blind}2
sc079 & e::Send,{Blind}3
sc079 & r::Send,{Blind}4
sc079 & t::Send,{Blind}5
sc079 & y::Send,{Blind}6
sc079 & u::Send,{Blind}7
sc079 & i::Send,{Blind}8
sc079 & o::Send,{Blind}9
sc079 & p::Send,{Blind}0
sc079 & @::Send,{Blind}{sc029} ;JP_HANKAKU_ZENKAKU

sc079 & a::Send,{Blind}-
sc079 & s::Send,{Blind}{^}
sc079 & d::Send,{Blind}\
sc079 & f::Send,{Blind}@
sc079 & g::Send,{Blind}:
sc079 & h::Send,{Blind}{U+007E} ;~
sc079 & j::Send,{Blind}{NumpadAdd} ;+
sc079 & k::Send,{Blind}{NumpadMult} ;*
sc079 & l::Send,{Blind}{NumpadDiv} ;/
sc079 & sc027::Send,{Blind}{U+003D} ;=
sc079 & sc028::Send,{Blind}{U+007C} ;|

sc079 & z::Send,{Blind}{U+0022} ;"
sc079 & x::Send,{Blind}{U+007B} ;{
sc079 & c::Send,{Blind}{U+007D} ;}
sc079 & v::Send,{Blind}{U+005B} ;[
sc079 & b::Send,{Blind}{U+005D} ;]
sc079 & n::Send,{Blind}{U+003C} ;<
sc079 & m::Send,{Blind}{U+003E} ;>
sc079 & sc033::Send,{Blind}{U+0028} ;(
sc079 & .::Send,{Blind}{U+0029} ;(
sc079 & /::Send,{Blind}{NumpadDot} ;.
sc079 & sc073::Send,{Blind}{U+0027} ;'

;raw henkan muhenkan
sc07B::Send,{sc07B}
sc079::Send,{sc079}

ついでに、以下をまとめたスクリプトコードも載せておく。

  • 英語直接入力はDvorak(記号は日本語キーボード)
  • 日本語入力はJISかなシフト配列
  • 「変換」「無変換」キー同時押しショートカットあり
SendMode Input
SetWorkingDir %A_ScriptDir%

IME_GET(WinTitle="A")  {
    ControlGet,hwnd,HWND,,,%WinTitle%
    if    (WinActive(WinTitle))    {
        ptrSize := !A_PtrSize ? 4 : A_PtrSize
        VarSetCapacity(stGTI, cbSize:=4+4+(PtrSize*6)+16, 0)
        NumPut(cbSize, stGTI,  0, "UInt")   ;    DWORD   cbSize;
        hwnd := DllCall("GetGUIThreadInfo", Uint,0, Uint,&stGTI)
                 ? NumGet(stGTI,8+PtrSize,"UInt") : hwnd
    }

    return DllCall("SendMessage"
          , UInt, DllCall("imm32\ImmGetDefaultIMEWnd", Uint,hwnd)
          , UInt, 0x0283  ;Message : WM_IME_CONTROL
          ,  Int, 0x0005  ;wParam  : IMC_GETOPENSTATUS
          ,  Int, 0)      ;lParam  : 0
}


#IF (IME_GET() == 0)

	;when IME is OFF, dvorak (kigou=JIS, with ctrl=qwerty)
	q::Send,'
	+q::Send,"
	w::Send,,
	+w::Send,<
	e::Send,.
	+e::Send,>
	r::Send,p
	+r::Send,+p
	t::Send,y
	+t::Send,+y
	y::Send,f
	+y::Send,+f
	u::Send,g
	+u::Send,+g
	i::Send,c
	+i::Send,+c
	o::Send,r
	+o::Send,+r
	p::Send,l
	+p::Send,+l
	@::Send,/
	+@::Send,?

	s::Send,o
	+s::Send,+o
	d::Send,e
	+d::Send,+e
	f::Send,u
	+f::Send,+u
	g::Send,i
	+g::Send,+i
	h::Send,d
	+h::Send,+d
	j::Send,h
	+j::Send,+h
	k::Send,t
	+k::Send,+t
	l::Send,n
	+l::Send,+n
	sc027::Send,s
	+sc027::Send,+s
	sc028::Send,-
	+sc028::Send,_

	z::Send,{SC027} ; ";"
	+z::Send,{SC028} ; ":"
	x::Send,q
	+x::Send,+q
	c::Send,j
	+c::Send,+j
	v::Send,k
	+v::Send,+k
	b::Send,x
	+b::Send,+x
	n::Send,b
	+n::Send,+b
	m::Send,m
	+m::Send,+m
	sc033::Send,w
	+sc033::Send,+w
	.::Send,v
	+.::Send,+v
	/::Send,z
	+/::Send,+z
	+sc073::Send,@



#IF (IME_GET() != 0)  

	;when IME is on, JIS kana shift
	+1::Send,{U+FF01} ;!
	+2::Send,{U+FFE5} ;¥

	+q::Send,1
	+w::Send,2
	+e::Send,3
	+r::Send,4
	+t::Send,5
	+y::Send,6
	+u::Send,7
	+i::Send,8
	+o::Send,9
	+p::Send,0
	+@::Send,[
	+[::Send,{U+300C} ;「

	+a::Send,]
	+s::Send,+e
	+d::Send,+3
	+f::Send,+4
	+g::Send,+5
	+h::Send,+6
	+j::Send,+7
	+k::Send,+8
	+l::Send,+9
	+sc027::Send,+0
	+sc028::Send,\
	+]::Send,{U+300D} ; 」

	+x::Send,-
	+c::Send,{^}
	+v::Send,{U+FF08} ;(
	+b::Send,{U+FF09} ;)
	+n::Send,{U+300C} ;「
	+m::Send,{U+300D} ; 」
	+sc073::Send,{U+FF1F} ;?


#IF
;don't care if IME is ON or OFF

	;muhenkan
	sc07B & q::Send,{Blind}{Esc}
	sc07B & e::Send,{Blind}{Up}
	sc07B & r::Send,{Blind}{U+0020} ; Space
	sc07B & y::Send,{Blind}{PrintScreen}
	sc07B & u::Send,{Blind}{Insert}
	sc07B & i::Send,{Blind}{Home}
	sc07B & o::Send,{Blind}{PgUp}

	sc07B & a::Send,{Blind}{Backspace}
	sc07B & s::Send,{Blind}{Left}
	sc07B & d::Send,{Blind}{Down}
	sc07B & f::Send,{Blind}{Right}
	sc07B & g::Send,{Blind}{Enter}
	sc07B & h::Send,{Blind}{AppsKey}
	sc07B & j::Send,{Blind}{Delete}
	sc07B & k::Send,{Blind}{End}
	sc07B & l::Send,{Blind}{PgDn}
	sc07B & sc027::Send,{Blind}{Backspace}
	sc07B & sc028::Send,{Blind}{F12}

	sc07B & z::Send,{Blind}{F1}
	sc07B & x::Send,{Blind}{F2}
	sc07B & c::Send,{Blind}{F3}
	sc07B & v::Send,{Blind}{F4}
	sc07B & b::Send,{Blind}{F5}
	sc07B & n::Send,{Blind}{F6}
	sc07B & m::Send,{Blind}{F7}
	sc07B & sc033::Send,{Blind}{F8}
	sc07B & .::Send,{Blind}{F9}
	sc07B & /::Send,{Blind}{F10}
	sc07B & sc073::Send,{Blind}{F11}

	;henkan
	sc079 & q::Send,{Blind}1
	sc079 & w::Send,{Blind}2
	sc079 & e::Send,{Blind}3
	sc079 & r::Send,{Blind}4
	sc079 & t::Send,{Blind}5
	sc079 & y::Send,{Blind}6
	sc079 & u::Send,{Blind}7
	sc079 & i::Send,{Blind}8
	sc079 & o::Send,{Blind}9
	sc079 & p::Send,{Blind}0
	sc079 & @::Send,{Blind}{sc029} ;JP_HANKAKU_ZENKAKU

	sc079 & a::Send,{Blind}-
	sc079 & s::Send,{Blind}{^}
	sc079 & d::Send,{Blind}\
	sc079 & f::Send,{Blind}@
	sc079 & g::Send,{Blind}:
	sc079 & h::Send,{Blind}{U+007E} ;~
	sc079 & j::Send,{Blind}{NumpadAdd} ;+
	sc079 & k::Send,{Blind}{NumpadMult} ;*
	sc079 & l::Send,{Blind}{NumpadDiv} ;/
	sc079 & sc027::Send,{Blind}{U+003D} ;=
	sc079 & sc028::Send,{Blind}{U+007C} ;|

	sc079 & z::Send,{Blind}{U+0022} ;"
	sc079 & x::Send,{Blind}{U+007B} ;{
	sc079 & c::Send,{Blind}{U+007D} ;}
	sc079 & v::Send,{Blind}{U+005B} ;[
	sc079 & b::Send,{Blind}{U+005D} ;]
	sc079 & n::Send,{Blind}{U+003C} ;<
	sc079 & m::Send,{Blind}{U+003E} ;>
	sc079 & sc033::Send,{Blind}{U+0028} ;(
	sc079 & .::Send,{Blind}{U+0029} ;(
	sc079 & /::Send,{Blind}{NumpadDot} ;.
	sc079 & sc073::Send,{Blind}{U+0027} ;'

	;raw henkan muhenkan
	sc07B::Send,{sc07B}
	sc079::Send,{sc079}