AutoHotKey 输入法切换

注释已经很详细了,不再解释。

GroupAdd, EN, ahk_exe Code.exe
GroupAdd, EN, ahk_exe git-bash.exe
GroupAdd, EN, ahk_exe git-cmd.exe

WinWaitActive, Ahk_group EN
    Esc::
        SendInput, {Esc}
        ; 切换为英文 0x4090409=67699721
        PostMessage, 0x50, 0, 0x4090409, , A
        ; 切换为中文 0x8040804=134481924
        ; PostMessage, 0x50, 0, 0x8040804, , A
Return


; ———————————————— CapsLock 
CapsLock::
; 大于 0 说明 SetTimer 已经启动了,按下次数递增
if pressesCount > 0
{
    pressesCount += 1
    Return
}

; 否则,这是新一系列按键的首次按下。将计数设重置为 1 ,并启动定时器:
pressesCount = 1
;400 毫秒内等待更多的按键。
SetTimer, WaitKey, 400
Return

WaitKey:
SetTimer, WaitKey, off
; 该键已按过一次。
if pressesCount = 1
{
    Gosub singlePresses
; 该键已按过两次。
} else if pressesCount = 2
{
	Gosub doublePresses
} else if pressesCount > 2
{
    Gosub treblePresses
}

; 不论上面哪个动作被触发,将计数复位以备下一系列的按键:
pressesCount = 0
Return

singlePresses:
; 切换到下一个输入法
DllCall("SendMessage", UInt, WinActive("A"), UInt, 80, UInt, 1, UInt, DllCall("ActivateKeyboardLayout", UInt, 1, UInt, 256))
Return

doublePresses:
send ^o
Return

treblePresses:
MsgBox, 检测到三次或更多次点击。
Return
; ———————————————— CapsLock 

posted @ 2020-07-15 23:44  ageovb  阅读(473)  评论(0编辑  收藏  举报