AUTOHOTKEY 带有重叠缩写的热字串

AUTOHOTKEY Hotstrings with overlapping abbreviations

我想为我的电子邮件地址创建一个热字符串“@@”,为我的完整邮政地址创建另一个“@@@”。我创建了一个脚本,当第三个热字串字符与第二个不同时,它可以工作,但无法让它为我喜欢的“@@@”热字串工作。

我的工作示例使用“@@”作为电子邮件,“@@1”作为地址,其中“1”需要在输入“@@”后的 0.7 秒内输入:

:*:@@::
keywait 1, D T 0.7
if errorlevel = 1
{
send {backspace}mrbenn@hotmail.com
}
else 
Send, {backspace}Mr.Benn, 52 Festive Road, London
return

我仍然需要弄清楚为什么这个答案有效,但它似乎按预期工作:

:*:@@::
keywait @, U T 0.7
keywait @, D T 0.7
if errorlevel = 1
{
send {backspace}mrbenn@hotmail.com
}
else 
Send, {backspace}Mr.Benn, 52 Festive Road, London
return

要记住的是,第一组冒号中的星号表示不等待结束字符,例如 space 或 return 触发(请参阅文档 https://www.autohotkey.com/docs/Hotstrings.htm 查看完整列表)。

一个更优雅的解决方案可能是这样的:

::@@::myemail@somedomain.com
:*:@@@::Mr Random, 123 Some St, Anytown, 012345

我个人更喜欢在发送完整字符串时在我的热字串中使用前缀字符,例如“*”,而不仅仅是拼写错误修复。示例:

:*:*tysm::thank you so much

在我使用 AHK 的十年经验中,这可以防止意外创建一个热字符串来替换您在最初编写脚本时没有考虑过的内容(总会忘记一些内容)。