我试图让两个连字符触发短划线,三个连字符触发长划线;像
:*?:---=::—
:*?:--=::–
除了工作。这是我要去的地方:
:*?:11::
SendLevel 1
Send 2
return
SendLevel 0
:*?:21::3
这是有效的(11产生2,111产生3)
:*?:--::
SendLevel 1
Send –
return
SendLevel 0
:*?:–-::—
这是相同的脚本,但'1'已被' - '取代,'2'已被' - '取代,'3'已被'-'-“ - ”取代“ - ”和“---”应该生成“ - ”,但它不起作用,因为在我使用的版本中不完全支持Unicode(来自autohotkey.com的AutoHotKey_L v1.1.09.04)。
答案 0 :(得分:37)
.ahk文本文件需要使用 UTF8-BOM 编码而不是UTF8保存
正如this comment所指出的那样,张贴作为更具可见性的答案。
答案 1 :(得分:2)
答案 2 :(得分:1)
;IMPORTANT, you must save this script as UTF-8 to make it work.
::!?::
::?!::
PutUni("‽")
Return
::neko::
PutUni("猫")
Return
:?:damn::
PutUni("✩☠#‼")
Return
;Paste UTF8 string (Hex encoded or not) as unicode.
;If you don't use Hex encoding, you must save your script as UTF8
PutUni(DataIn)
{
SavedClip := ClipBoardAll
ClipBoard =
If RegExMatch(DataIn, "^[0-9a-fA-F]+$")
{
Loop % StrLen(DataIn) / 2
UTF8Code .= Chr("0x" . SubStr(DataIn, A_Index * 2 - 1, 2))
}
Else
UTF8Code := DataIn
Transform, ClipBoard, Unicode, %UTF8Code%
Send ^v
Sleep 100 ;Generous, less wait or none will often work.
ClipBoard := SavedClip
Return
}
PutUni
函数会将所需的输入“转换”为所需的Unicode输出。
答案 3 :(得分:1)
编辑:不要费心阅读我的回答,按照Udo Klein的说法进行操作,这样做会更容易,而且工作正常。
如何使用上一个autohotkey版本发送unicode字符? (不需要以前的unicode兼容版本)
很难找到明确的信息。所以要让初学者(像我一样)明白:
代码A:
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)}
代码B:
!+^D:: ; when press CTRL+ALT+SHIFT will output "≠"
{
SendUnicodeChar(0x2260)
}
return
(观看空间!)
需要改进:
不知何故,这个脚本对于本网站http://unicode-table.com/给出的所有unicode都不起作用,但是有人可能会很友好地告诉我们为什么有些unicode正在工作而其他人不在,以及也许如何让它适用于本网站的任何unicode角色。 例如http://unicode-table.com/en/0609/这个不起作用。知道为什么吗?