Auohotkey 脚本求助

最近研究AutoHotkey脚本,写了一个关于输入法切换的脚本,在默认英文输入法状态下,转为中文输入状态,并输入已打出的字母,为了减少想输入中文打出来却是英文字母的麻烦。
动画
脚本快捷键Shift+space,默认微软拼音输入法,Ctrl+Space 切换中英。
但有个bug出现频率挺高的,就是莫名地把已输入的字母转换成大写,不知道哪里出了问题,求各位大佬帮忙看看。非计算机相关专业出身,代码网上东拼西凑的,请见谅。
image_240

;切换中文输入法时,自动输入已输入字符
+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

我之前写过同样功能的,你可以参考一下:

还有另一个坛友的改进版:

1 Like

谢谢,正则加个"$"原来可以从后向前匹配, ::我还费劲的反转再匹配,用坛友的方法流畅多了。