最近研究AutoHotkey脚本,写了一个关于输入法切换的脚本,在默认英文输入法状态下,转为中文输入状态,并输入已打出的字母,为了减少想输入中文打出来却是英文字母的麻烦。
脚本快捷键Shift+space,默认微软拼音输入法,Ctrl+Space 切换中英。
但有个bug出现频率挺高的,就是莫名地把已输入的字母转换成大写,不知道哪里出了问题,求各位大佬帮忙看看。非计算机相关专业出身,代码网上东拼西凑的,请见谅。
;切换中文输入法时,自动输入已输入字符
+Space::
Send {ShiftDown}{Home}{ShiftUp}
Sleep 50
Send ^c
sleep 50
Haystack = %clipboard%
;;字符串反转
ReverseString(ByRef String)
{
String .= "", DllCall("msvcrt.dll\_wcsrev", "Ptr", &String, "CDecl")
return String
}
sleep 50
ReverseHaystack = % ReverseString(ByRef Haystack)
RegExMatchPos = % RegExMatch(ReverseHaystack, "i)[^a-z]")
HaystackLen = % StrLen(Haystack)
if (RegExMatchPos = 1) { ; =1时表示末尾不是字母
Send {Right}
Sleep 50
Send {Ctrl down}{space}{Ctrl up}
} else {
FoundPos = % HaystackLen - RegExMatchPos ;获取非字母字符位置
if (HaystackLen - FoundPos > 0) {
num :=1
; SubStr1 = % SubStr(Haystack, 1, FoundPos + 1)
SubStr2 = % SubStr(Haystack, FoundPos + 2)
Send {Right}
Loop {
Send {BackSpace}
num += 1
}Until (num = HaystackLen - FoundPos)
; Send % SubStr1
Send {Ctrl down}{space}{Ctrl up}
Sleep 50
Send % SubStr2
} else {
Send {Ctrl down}{space}{Ctrl up}
Sleep 50
Send % Haystack
}
}
sleep 100
return