Autohotkey:发送 5 位十六进制 unicode 字符

mar*_*ark 5 windows unicode scripting autohotkey keyboard-shortcuts

我一直在尝试找到一种方法来重新映射我的键盘并发送5位十六进制unicode字符,这里描述的方法:ahk Send仅支持4位十六进制代码{U+nnnn},我知​​道在过去,autohotkey没有原生支持 unicode,因此需要一些函数才能做到这一点,也许这就是我的解决方案。

\n\n

例子:

\n\n
#If GetKeyState("CapsLock","T")\n+u::Send {U+1D4B0}\n
Run Code Online (Sandbox Code Playgroud)\n\n

结果是 \xed\x92\xb0 而不是 ,而 \xed\x92\xb0 的代码是 {U+D4B0},这意味着 AHK 只读取最后 4 位数字。即使我需要创建新功能来实现这一目标,我该如何解决它?

\n\n

谢谢

\n\n

-标记

\n

250*_*501 4

大于 0xFFFF 的 Unicode 值必须编码为两个代理对:

+u:: SendInput ,{U+D835}{U+DCB0}
Run Code Online (Sandbox Code Playgroud)

以下是将 0x10000 到 0x10FFFF 范围内的 Unicode代码点转换为代理对的算法,摘自维基百科

首先从代码点减去 0x10000 ,得到0xFFFFF 范围内的数字。

然后将数字右移10 位并添加 0xD800 以获取高代理项

取数字的最低十位并添加 0xDC00 以获得低位代理