SandSとはSpace and Shiftの略。
Spaceを押し続けている間はShiftキー入力になり、
Spaceを単発で押した場合にはSpaceが入力できる。
(Spaceを連続で入力する時は無変換キー+”r”で入力する)
AutoHotKeyでSandSを実現するため、
様々なサイトを参照したが、どれも思い通り動かなかった。
(自分が変換キーとか無変換キーの同時押しが必要だからだが。)
特に、AutoHotKeyで3つのキーを同時入力し、
キーマップを変更することはできない。
3つのキーを同時入力し、動作を切り替えるには、以下のようにする。
;無変換キーとqが同時に押された場合に、
sc07B & q::
;Spaceキーが押されているか?
If GetKeyState("Space", "P")
;Spaceキーが押されている場合はShift&Escに変換
Send,{Blind}+{Esc}
Else
;Spaceキーが押されていない場合はEscに変換
Send,{Blind}{Esc}
Return
というわけで、とても長くなってしまい冗長だが、愚直に書いた。
- 英語直接入力はDvorak(記号は日本語キーボード)
- 日本語入力はJISかなシフト配列
- 「変換」「無変換」キー同時押しショートカットあり
- SandSあり
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)
Space & 1::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+1
Else
Send,{Blind}+1
Return
Space & 2::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+2
Else
Send,{Blind}+2
Return
Space & 3::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+3
Else
Send,{Blind}+3
Return
Space & 4::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+4
Else
Send,{Blind}+4
Return
Space & 5::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+5
Else
Send,{Blind}+5
Return
Space & 6::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+6
Else
Send,{Blind}+6
Return
Space & 7::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+7
Else
Send,{Blind}+7
Return
Space & 8::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+8
Else
Send,{Blind}+8
Return
Space & 9::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+9
Else
Send,{Blind}+9
Return
Space & 0::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+0
Else
Send,{Blind}+0
Return
Space & -::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+-
Else
Send,{Blind}+-
Return
Space & sc00D::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+{sc00D}
Else
Send,{Blind}+{sc00D}
Return
Space & \::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+\
Else
Send,{Blind}+\
Return
q::Send,'
+q::Send,"
Space & q::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+q
Else
Send,{Blind}"
Return
w::Send,,
+w::Send,<
Space & w::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+w
Else
Send,{Blind}<
Return
e::Send,.
+e::Send,>
Space & e::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+e
Else
Send,{Blind}>
Return
r::Send,p
+r::Send,+p
Space & r::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+r
Else
Send,{Blind}+p
Return
t::Send,y
+t::Send,+y
Space & t::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+t
Else
Send,{Blind}+y
Return
y::Send,f
+y::Send,+f
Space & y::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+y
Else
Send,{Blind}+f
Return
u::Send,g
+u::Send,+g
Space & u::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+u
Else
Send,{Blind}+g
Return
i::Send,c
+i::Send,+c
Space & i::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+i
Else
Send,{Blind}+c
Return
o::Send,r
+o::Send,+r
Space & o::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+o
Else
Send,{Blind}+r
Return
p::Send,l
+p::Send,+l
Space & p::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+p
Else
Send,{Blind}+l
Return
@::Send,/
+@::Send,?
Space & @::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+@
Else
Send,{Blind}?
Return
Space & [::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+[
Else
Send,{Blind}+[
Return
Space & a::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+a
Else
Send,{Blind}+a
Return
s::Send,o
+s::Send,+o
Space & s::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+s
Else
Send,{Blind}+o
Return
d::Send,e
+d::Send,+e
Space & d::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+d
Else
Send,{Blind}+e
Return
f::Send,u
+f::Send,+u
Space & f::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+f
Else
Send,{Blind}+u
Return
g::Send,i
+g::Send,+i
Space & g::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+g
Else
Send,{Blind}+i
Return
h::Send,d
+h::Send,+d
Space & h::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+h
Else
Send,{Blind}+d
Return
j::Send,h
+j::Send,+h
Space & j::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+j
Else
Send,{Blind}+h
Return
k::Send,t
+k::Send,+t
Space & k::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+k
Else
Send,{Blind}+t
Return
l::Send,n
+l::Send,+n
Space & l::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+l
Else
Send,{Blind}+n
Return
sc027::Send,s
+sc027::Send,+s
Space & sc027::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+{sc027}
Else
Send,{Blind}+s
Return
sc028::Send,-
+sc028::Send,_
Space & sc028::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+{sc028}
Else
Send,{Blind}_
Return
z::Send,{SC027} ; ";"
+z::Send,{SC028} ; ":"
Space & z::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+z
Else
Send,{Blind}{SC028}
Return
x::Send,q
+x::Send,+q
Space & x::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+x
Else
Send,{Blind}+q
Return
c::Send,j
+c::Send,+j
Space & c::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+c
Else
Send,{Blind}+j
Return
v::Send,k
+v::Send,+k
Space & v::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+v
Else
Send,{Blind}+k
Return
b::Send,x
+b::Send,+x
Space & b::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+b
Else
Send,{Blind}+x
Return
n::Send,b
+n::Send,+b
Space & n::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+n
Else
Send,{Blind}+b
Return
Space & m::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+m
Else
Send,{Blind}+m
Return
sc033::Send,w
+sc033::Send,+w
Space & sc033::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+{sc033}
Else
Send,{Blind}+w
Return
.::Send,v
+.::Send,+v
Space & .::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+.
Else
Send,{Blind}+v
Return
/::Send,z
+/::Send,+z
Space & /::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+/
Else
Send,{Blind}+z
Return
+sc073::Send,@
Space & sc073::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+{sc073}
Else
Send,{Blind}@
Return
#IF (IME_GET() != 0)
;when IME is on, JIS kana shift
+1::Send,{U+FF01} ;!
Space & 1::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+1
Else
Send,{Blind}{U+FF01} ;!
Return
+2::Send,{U+FFE5} ;¥
Space & 2::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+2
Else
Send,{Blind}{U+FFE5} ;¥
Return
Space & 3::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+3
Else
Send,{Blind}+3
Return
Space & 4::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+4
Else
Send,{Blind}+4
Return
Space & 5::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+5
Else
Send,{Blind}+5
Return
Space & 6::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+6
Else
Send,{Blind}+6
Return
Space & 7::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+7
Else
Send,{Blind}+7
Return
Space & 8::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+8
Else
Send,{Blind}+8
Return
Space & 9::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+9
Else
Send,{Blind}+9
Return
Space & 0::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+0
Else
Send,{Blind}+0
Return
Space & -::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+-
Else
Send,{Blind}+-
Return
Space & sc00D::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+{sc00D}
Else
Send,{Blind}+{sc00D}
Return
Space & \::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+\
Else
Send,{Blind}+\
Return
+q::Send,1
Space & q::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+q
Else
Send,{Blind}1
Return
+w::Send,2
Space & w::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+w
Else
Send,{Blind}2
Return
+e::Send,3
Space & e::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+e
Else
Send,{Blind}3
Return
+r::Send,4
Space & r::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+r
Else
Send,{Blind}4
Return
+t::Send,5
Space & t::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+t
Else
Send,{Blind}5
Return
+y::Send,6
Space & y::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+y
Else
Send,{Blind}6
Return
+u::Send,7
Space & u::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+u
Else
Send,{Blind}7
Return
+i::Send,8
Space & i::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+i
Else
Send,{Blind}8
Return
+o::Send,9
Space & o::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+w
Else
Send,{Blind}2
Return
+p::Send,0
Space & p::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+p
Else
Send,{Blind}0
Return
+@::Send,[
Space & @::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+@
Else
Send,{Blind}[
Return
+[::Send,{U+300C} ;「
Space & [::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+[
Else
Send,{Blind}{U+300C} ;「
Return
+a::Send,]
Space & a::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+a
Else
Send,{Blind}]
Return
+s::Send,+e
Space & s::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+s
Else
Send,{Blind}+e
Return
+d::Send,+3
Space & d::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+d
Else
Send,{Blind}+3
Return
+f::Send,+4
Space & f::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+f
Else
Send,{Blind}+4
Return
+g::Send,+5
Space & g::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+g
Else
Send,{Blind}+5
Return
+h::Send,+6
Space & h::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+h
Else
Send,{Blind}+6
Return
+j::Send,+7
Space & j::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+j
Else
Send,{Blind}+7
Return
+k::Send,+8
Space & k::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+k
Else
Send,{Blind}+8
Return
+l::Send,+9
Space & l::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+l
Else
Send,{Blind}+9
Return
+sc027::Send,+0
Space & sc027::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+sc027
Else
Send,{Blind}+0
Return
+sc028::Send,\
Space & sc028::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+sc028
Else
Send,{Blind}\
Return
+]::Send,{U+300D} ; 」
Space & ]::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+]
Else
Send,{Blind}{U+300D} ; 」
Return
Space & z::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+z
Else
Send,{Blind}+z
Return
+x::Send,-
Space & x::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+x
Else
Send,{Blind}-
Return
+c::Send,{^}
Space & c::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+c
Else
Send,{Blind}{^}
Return
+v::Send,{U+FF08} ;(
Space & v::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+v
Else
Send,{Blind}{U+FF08} ;(
Return
+b::Send,{U+FF09} ;)
Space & b::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+b
Else
Send,{Blind}{U+FF09} ;)
Return
+n::Send,{U+300C} ;「
Space & n::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+n
Else
Send,{Blind}{U+300C} ;「
Return
+m::Send,{U+300D} ; 」
Space & m::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+m
Else
Send,{Blind}{U+300D} ; 」
Return
Space & sc033::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+{sc033}
Else
Send,{Blind}+{sc033}
Return
Space & .::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+.
Else
Send,{Blind}+.
Return
Space & /::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+/
Else
Send,{Blind}+/
Return
+sc073::Send,{U+FF1F} ;?
Space & sc073::
If GetKeyState("Ctrl", "P")
Send,{Blind}^+{sc073}
Else
Send,{Blind}{U+FF1F} ;?
Return
#IF
;don't care if IME is ON or OFF
;muhenkan
sc07B & q::
If GetKeyState("Space", "P")
Send,{Blind}+{Esc}
Else
Send,{Blind}{Esc}
Return
sc07B & e::
If GetKeyState("Space", "P")
Send,{Blind}+{Up}
Else
Send,{Blind}{Up}
Return
sc07B & r::
If GetKeyState("Space", "P")
Send,{Blind}+{U+0020} ; Space
Else
Send,{Blind}{U+0020} ; Space
Return
sc07B & y::
If GetKeyState("Space", "P")
Send,{Blind}+{PrintScreen}
Else
Send,{Blind}{PrintScreen}
Return
sc07B & u::
If GetKeyState("Space", "P")
Send,{Blind}+{Insert}
Else
Send,{Blind}{Insert}
Return
sc07B & i::
If GetKeyState("Space", "P")
Send,{Blind}+{Home}
Else
Send,{Blind}{Home}
Return
sc07B & o::
If GetKeyState("Space", "P")
Send,{Blind}+{PgUp}
Else
Send,{Blind}{PgUp}
Return
sc07B & a::
If GetKeyState("Space", "P")
Send,{Blind}+{Backspace}
Else
Send,{Blind}{Backspace}
Return
sc07B & s::
If GetKeyState("Space", "P")
Send,{Blind}+{Left}
Else
Send,{Blind}{Left}
Return
sc07B & d::
If GetKeyState("Space", "P")
Send,{Blind}+{Down}
Else
Send,{Blind}{Down}
Return
sc07B & f::
If GetKeyState("Space", "P")
Send,{Blind}+{Right}
Else
Send,{Blind}{Right}
Return
sc07B & g::
If GetKeyState("Space", "P")
Send,{Blind}+{Enter}
Else
Send,{Blind}{Enter}
Return
sc07B & h::
If GetKeyState("Space", "P")
Send,{Blind}+{AppsKey}
Else
Send,{Blind}{AppsKey}
Return
sc07B & j::
If GetKeyState("Space", "P")
Send,{Blind}+{Delete}
Else
Send,{Blind}{Delete}
Return
sc07B & k::
If GetKeyState("Space", "P")
Send,{Blind}+{End}
Else
Send,{Blind}{End}
Return
sc07B & l::
If GetKeyState("Space", "P")
Send,{Blind}+{PgDn}
Else
Send,{Blind}{PgDn}
Return
sc07B & sc027::
If GetKeyState("Space", "P")
Send,{Blind}+{Backspace}
Else
Send,{Blind}{Backspace}
Return
sc07B & sc028::
If GetKeyState("Space", "P")
Send,{Blind}+{F12}
Else
Send,{Blind}{F12}
Return
sc07B & z::
If GetKeyState("Space", "P")
Send,{Blind}+{F1}
Else
Send,{Blind}{F1}
Return
sc07B & x::
If GetKeyState("Space", "P")
Send,{Blind}+{F2}
Else
Send,{Blind}{F2}
Return
sc07B & c::
If GetKeyState("Space", "P")
Send,{Blind}+{F3}
Else
Send,{Blind}{F3}
Return
sc07B & v::
If GetKeyState("Space", "P")
Send,{Blind}+{F4}
Else
Send,{Blind}{F4}
Return
sc07B & b::
If GetKeyState("Space", "P")
Send,{Blind}+{F5}
Else
Send,{Blind}{F5}
Return
sc07B & n::
If GetKeyState("Space", "P")
Send,{Blind}+{F6}
Else
Send,{Blind}{F6}
Return
sc07B & m::
If GetKeyState("Space", "P")
Send,{Blind}+{F7}
Else
Send,{Blind}{F7}
Return
sc07B & sc033::
If GetKeyState("Space", "P")
Send,{Blind}+{F8}
Else
Send,{Blind}{F8}
Return
sc07B & .::
If GetKeyState("Space", "P")
Send,{Blind}+{F9}
Else
Send,{Blind}{F9}
Return
sc07B & /::
If GetKeyState("Space", "P")
Send,{Blind}+{F10}
Else
Send,{Blind}{F10}
Return
sc07B & sc073::
If GetKeyState("Space", "P")
Send,{Blind}+{F11}
Else
Send,{Blind}{F11}
Return
;henkan
sc079 & q::
If GetKeyState("Space", "P")
Send,{Blind}+1
Else
Send,{Blind}1
Return
sc079 & w::
If GetKeyState("Space", "P")
Send,{Blind}+2
Else
Send,{Blind}2
Return
sc079 & e::
If GetKeyState("Space", "P")
Send,{Blind}+3
Else
Send,{Blind}3
Return
sc079 & r::
If GetKeyState("Space", "P")
Send,{Blind}+4
Else
Send,{Blind}4
Return
sc079 & t::
If GetKeyState("Space", "P")
Send,{Blind}+5
Else
Send,{Blind}5
Return
sc079 & y::
If GetKeyState("Space", "P")
Send,{Blind}+6
Else
Send,{Blind}6
Return
sc079 & u::
If GetKeyState("Space", "P")
Send,{Blind}+7
Else
Send,{Blind}7
Return
sc079 & i::
If GetKeyState("Space", "P")
Send,{Blind}+8
Else
Send,{Blind}8
Return
sc079 & o::
If GetKeyState("Space", "P")
Send,{Blind}+9
Else
Send,{Blind}9
Return
sc079 & p::
If GetKeyState("Space", "P")
Send,{Blind}+0
Else
Send,{Blind}0
Return
sc079 & @::
If GetKeyState("Space", "P")
Send,{Blind}+{sc029} ;JP_HANKAKU_ZENKAKU
Else
Send,{Blind}{sc029} ;JP_HANKAKU_ZENKAKU
Return
sc079 & a::
If GetKeyState("Space", "P")
Send,{Blind}+-
Else
Send,{Blind}-
Return
sc079 & s::
If GetKeyState("Space", "P")
Send,{Blind}+{^}
Else
Send,{Blind}{^}
Return
sc079 & d::
If GetKeyState("Space", "P")
Send,{Blind}+\
Else
Send,{Blind}\
Return
sc079 & f::
If GetKeyState("Space", "P")
Send,{Blind}+@
Else
Send,{Blind}@
Return
sc079 & g::
If GetKeyState("Space", "P")
Send,{Blind}+:
Else
Send,{Blind}:
Return
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}
;raw Space
Space::Send,{Space}