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

Dvorak配列(記号はJIS配列)

通常のQwerty配列よりも、Dvorak配列が好き。
しかし、ctrl+Cやctrl+Vなどのショートカットは、Qwerty配列の方が便利。


通常時はDvorak配列にし、
ctrlキーを押した時はQwerty配列にしたい。
AutoHotKeyでスクリプトコードを作った。

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,@

メモ:
c::Send,j
+c::Send,+j
と書かなくても、
*c::Send,{Blind}j
と書けば事足りるが、
これではctrl+cと押した時に、ctrl+jと変換されてしまうので、
コピーのショートカットが使えなくなってしまう。
なのでわざわざ二行に分けて書いてある。
(+はshiftと同時押しの意味。*はCtrl/Alt/Shift/Winと同時押しの意味。)

IF (IME_GET() == 0)
と書くことにより、IME OFF、つまり直接入力の時のみ、Dvorak配列が有効になる。

IME_GET()関数は、コチラのサイトから頂いた。
https://w.atwiki.jp/eamat/pages/17.html
ありがとうございました。

数字の段の記号は日本語キーボードの配置にしてある。
いつでも日本語キーボードに戻れるように。
それだと「@」が打てなくなってしまうので、「@」を一番右下のキーに配置した。