Autohotkey无条件地触发热字串

时间:2014-06-22 08:19:19

标签: special-characters autohotkey

因为有时候,我需要使用键盘上没有的特殊字符将文本翻译成不同的语言,例如ışñğ

我使用AutoHotKey创建了一个脚本,转换了^ + ^ + s - >的组合。进入ş,对于其他角色也是如此。

脚本工作正常,但仅在第一个^之前的字符是空格或第一个字母时才起作用。例如,在键入ma^^n< - 时,这不会转换我的角色,而^^n< - 会对其进行转换。

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

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

:*c:^^s::
SendUnicodeChar(0x015F)
Return

:*c:^^i::
SendUnicodeChar(0x131)
Return

:*c:^^I::
SendUnicodeChar(0x130)
Return

:*c:^^g::
SendUnicodeChar(0x011F)
Return

:*c:^^G::
SendUnicodeChar(0x011E)
Return

:*c:^^n::
SendUnicodeChar(0x00F1)
Return

:*c:^^N::
SendUnicodeChar(0x00D1)
Return

:*c:^^c::
SendUnicodeChar(0x00E7)
Return

:*c:^^C::
SendUnicodeChar(0x00C7)
Return

; Find the corresponding letter from the unicode
; and send the input back
SendUnicodeChar(charCode)
{
    VarSetCapacity(ki, 28 * 2, 0)
    EncodeInteger(&ki + 0, 1)
    EncodeInteger(&ki + 6, charCode)
    EncodeInteger(&ki + 8, 4)
    EncodeInteger(&ki +28, 1)
    EncodeInteger(&ki +34, charCode)
    EncodeInteger(&ki +36, 4|2)

    DllCall("SendInput", "UInt", 2, "UInt", &ki, "Int", 28)
}

EncodeInteger(ref, val)
{
    DllCall("ntdll\RtlFillMemoryUlong", "Uint", ref, "Uint", 4, "Uint", val)
}  

1 个答案:

答案 0 :(得分:4)

根据AHK docs on hotstring options

  

(问号):即使存在热字符串也会被触发   在另一个词里面;也就是说,当角色立即输入时   在它是字母数字之前。例如,如果:?:al :: airline是a   hotstring,输入“practical”会产生“practicairline”。使用?0   关闭此选项。

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

:?*c:^^S::
   SendUnicodeChar(0x015E)
Return

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

#Hotstring ?*c

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

::^^s::
    SendUnicodeChar(0x015F)
Return