Autohotkey 使热字串无条件触发

FR0*_*73N 3 autohotkey special-characters

因为有时,我需要使用键盘上不存在的特殊字符将文本翻译成不同的语言,例如\xc4\xb1, \xc5\x9f, \xc3\xb1, \xc4\x9f

\n\n

我创建了一个脚本,将->AutoHotKey的组合转换为,以与其他字符相同的方式。^ + ^ + s\xc5\x9f

\n\n

该脚本工作正常,但仅当第一个字符之前的字符^是空格或第一个字母时才有效。例如,当输入ma^^n<- 时,这不会改变我的角色,而^^n<- 会改变它。

\n\n

这是脚本,我在创建脚本时指定我只学习了这种语言:

\n\n
:*c:^^S::\nSendUnicodeChar(0x015E)\nReturn\n\n:*c:^^s::\nSendUnicodeChar(0x015F)\nReturn\n\n:*c:^^i::\nSendUnicodeChar(0x131)\nReturn\n\n:*c:^^I::\nSendUnicodeChar(0x130)\nReturn\n\n:*c:^^g::\nSendUnicodeChar(0x011F)\nReturn\n\n:*c:^^G::\nSendUnicodeChar(0x011E)\nReturn\n\n:*c:^^n::\nSendUnicodeChar(0x00F1)\nReturn\n\n:*c:^^N::\nSendUnicodeChar(0x00D1)\nReturn\n\n:*c:^^c::\nSendUnicodeChar(0x00E7)\nReturn\n\n:*c:^^C::\nSendUnicodeChar(0x00C7)\nReturn\n\n; Find the corresponding letter from the unicode\n; and send the input back\nSendUnicodeChar(charCode)\n{\n    VarSetCapacity(ki, 28 * 2, 0)\n    EncodeInteger(&ki + 0, 1)\n    EncodeInteger(&ki + 6, charCode)\n    EncodeInteger(&ki + 8, 4)\n    EncodeInteger(&ki +28, 1)\n    EncodeInteger(&ki +34, charCode)\n    EncodeInteger(&ki +36, 4|2)\n\n    DllCall("SendInput", "UInt", 2, "UInt", &ki, "Int", 28)\n}\n\nEncodeInteger(ref, val)\n{\n    DllCall("ntdll\\RtlFillMemoryUlong", "Uint", ref, "Uint", 4, "Uint", val)\n}  \n
Run Code Online (Sandbox Code Playgroud)\n

MCL*_*MCL 5

根据AHK 关于热字符串选项的文档

(问号):热字串即使在另一个单词内部也会被触发;也就是说,当紧邻其之前键入的字符是字母数字时。例如,如果 :?:al::airline 是热字符串,则输入“practical”将产生“practicairline”。使用 ?0 关闭此选项。

因此,您的热字符串应该如下所示:

:?*c:^^S::
   SendUnicodeChar(0x015E)
Return
Run Code Online (Sandbox Code Playgroud)

您可能还想全局设置选项,这样您就不必将它们单独应用于每个热字符串:

#Hotstring ?*c

::^^S::
    SendUnicodeChar(0x015E)
Return

::^^s::
    SendUnicodeChar(0x015F)
Return
Run Code Online (Sandbox Code Playgroud)