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