長押しIME切り替え.ahk
バージョン2
2020-01-10から。
前提条件:
英語キーボードでは不必要:別ツールでの Caps Lock の置き換え。
Windows等の設定で、日本語に切り替えalt+shift+2、中国語に切り替え ctrl+, が設定してある。
code:長押しIME切り替え.ahk
SetCapsLockState, AlwaysOff
SetKeyDelay, 0
ShowMessage("AHK-funkcioj estas aktivaj")
return
;Ctrlを単押しでアルファベット入力に
$*LCtrl::
if (isCtrlRepeat == true) ;キーリピートしているかどうか
{
if (A_PriorKey != "LControl") ;Ctrl長押し中の他キー押し下げを検出
{
KeyWait, LCtrl
Send {Blind}{CtrlUp} ;Ctrlをリリース
isCtrlRepeat := false
Return
}
else Return
}
Send {Blind}{CtrlDown} ;Ctrlを押し下げ
isCtrlRepeat := true
Return
;Ctrlを離したときに判定
$*LCtrl up::
Send {Blind}{CtrlUp} ;Ctrlをリリース
isCtrlRepeat := false
if (A_PriorKey == "LControl"){ ;RCtrl単押しを検出
ShowMessage("Esperanta reĝimo")
Send, !+2 ;日本語に切り替え
IME_SET(1) ;入力モードをかなに変えて
IME_SET(0) ;英数に戻す(次の行が受け付けられないことがあるので念の為)
Return
}
Return
;Fを長押しで日本語入力に
f::
Thread, Interrupt, 250
KeyWait,f,T0.25
If(ErrorLevel)
{
KeyWait,f
Send, ^,
Send, !+2 ;日本語に復帰
IME_SET(0) ;入力モードを指示(受け付けないIMEもあるが念の為)
IME_SET(1)
ShowMessage("日本語入力")
Return
}
Send, f
Return
;Vを長押しで中国語入力に
v::
Thread, Interrupt, 250
KeyWait,v,T0.25
If(ErrorLevel)
{
ShowMessage("中文输入法")
KeyWait,v
Send, ^,
Return
}
Send, v
Return
ShowMessage(message) {
; Progress, B ZH0 FS20 WS700 CTEEEEEE CW333333, %message%, , , Segoe UI
Progress, B ZH0 FS20 WS700 CTAAFFEE CW112233 WM500, %message%, , progtip, 字体管家乌克丽丽
WinSet, Transparent, 150, progtip
SetTimer, HideMessage, 2000
}
HideMessage() {
Progress, off
SetTimer, HideMessage, off
}
以下、過去ログ
バージョン1
2020-01-10 まで使用した
前提条件:
別ツールで Caps Lock を Insert に置き換えてある。
Windows等の設定で、日本語に切り替えalt+shift+2、中国語に切り替え ctrl+, が設定してある。
code:2度押し長押しIME切り替え.ahk
SetCapsLockState, AlwaysOff
SetKeyDelay, 0
Insert::
Send, !+2 ;日本語に切り替えておく
KeyWait,Insert,T0.2 ;押し下げて
If(ErrorLevel) ;上がらない = 長押し
{
Send, ^, ;中国語にする
KeyWait,Insert
Return
}
KeyWait,Insert,D T0.2 ;二度押しか?
If(ErrorLevel) ;二度押しでない = 一度押し
{
IME_SET(0) ;ダイレクトインプットモードにする
KeyWait,Insert
Return
}
IME_SET(1) ;それ以外は二度押しだ(ひらがな入力モードにする)
KeyWait,Insert
Return