因为有时候,我需要使用键盘上没有的特殊字符将文本翻译成不同的语言,例如ı
,ş
,ñ
,ğ
。
我使用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)
}
答案 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