前言
对于多语言输入法+美式英语键盘使用者而言,使用微软日语输入法简直就是噩梦。因为首次切换微软日语输入法会默认切成英文输入模式,还要手动切换平假名模式才能正常输入日语。
这个脚本的作用是每次用 win+空格切换到日语输入法的时候会自动切换到平假名模式。
考虑网络上分享的 ahk 脚本大多数是 v1 版本的,而且实现的方案有点太粗暴了(虽然我这个脚本也很垃圾就是了),如果有更好的解决方案欢迎分享!
具体代码
; 获取当前键盘的虚拟键码的函数
GetKeyboardLanguage(_hWnd := 0)
{
if (!_hWnd)
ThreadId := 0
else
if !(ThreadId := DllCall("user32.dll\GetWindowThreadProcessId", "Ptr", _hWnd, "UInt", 0, "UInt"))
return false
if !(KBLayout := DllCall("user32.dll\GetKeyboardLayout", "UInt", ThreadId, "UInt"))
return false
return KBLayout & 0xFFFF
}
; Win+Space 切换语言自动切换假名模式
#Space:: {
; 记录切换前的语言
prevLanguage := GetKeyboardLanguage(WinExist("A"))
; 发送 Win+Space 切换语言
Send "#{Space}"
; 等待语言切换完成
startTime := A_TickCount
Loop {
; 检查当前语言
currentLanguage := GetKeyboardLanguage(WinExist("A"))
; 如果语言已变化,跳出循环
if (currentLanguage != prevLanguage)
break
; 如果超过2秒还没变化,避免无限循环
if (A_TickCount - startTime > 2000)
break
Sleep 50 ; 短暂暂停再检查
}
; 如果切换后是日语(1041),发送 Ctrl+CapsLock
if (currentLanguage = 1041) {
Send "^{CapsLock}"
}
}