如何在AutoHotKey中的hotstring中声明变量?

时间:2013-03-19 17:54:13

标签: autohotkey

我正在尝试创建一个名称并将其添加到预先写好的文本块中的脚本。

基本上,我想编写“emailDave”并将名称Dave插入到随后发送的文本字符串中。我只是不确定如何以这种方式修改热字符串。

我目前正在使用一个使用InputBox请求名称的方法,并将名称插入到文本中。这在桌面上运行得很好,但我使用的是Windows 8,由于一些可怕的原因,InputBox不会显示在应用内(即在桌面模式之外)。

我知道必须有一种方法可以使用我输入的文本“email vs emailDave”来影响变量,而不是让我用InputBox进行这种鹅追逐。

也就是说,如果有人知道在Windows 8应用程序(特别是Mail)中显示InputBox的解决方法,那将非常有帮助。

当前脚本在桌面上运行正常,但无法在应用程序中运行:

::email::
InputBox, thename, Enter the name, What is the name
SendInput Hi %thename%,{enter}{enter}Sample text.{enter}{enter}Thanks,{enter}Zach
Return

有没有办法制作类似这样的作品?

::email{%thename%}::
SendInput Hi %thename%,{enter}{enter}Sample text.{enter}{enter}Thanks,{enter}Zach
Return

3 个答案:

答案 0 :(得分:1)

如果您真的想避免使用InputBox,我会为您提供更复杂的解决方案。您可以使用名为RegEx Powered Dynamic HotStrings的库。

将该链接中的文件保存到包含AutoHotkey.exe的文件夹内的lib文件夹中(必要时创建)。

在此示例中,您键入emailJohn,然后键入 Space

#Include lib\DynamicHotstrings.ahk

hotstrings("email(\w+)\s", "email")
Return

email:
    SendInput, Hi %$1%,{Enter 2}Sample text.{Enter 2}Thanks,{Enter}Zach
return

答案 1 :(得分:0)

他的:

:?*:email::
Input, thename, v,{Enter}{Space}
If (thename = "")
{
    SendInput, {Bs}email `
    Return
}
StringLen,MyLen, thename
MyLen++
SendInput {BackSpace %MyLen%}Hi +%thename%,{Enter 2}Sample text.{Enter 2}Thanks,{Enter}Zach
Return

通过在名称字符串前添加一个+,第一个字母将大写。

输入:“emailrobert {Enter}”或“emailRobert {Enter}”均表示:

嗨罗伯特,

示例文字。

谢谢,
扎克

并且电子邮件{Space}会发送电子邮件{Space}。

答案 2 :(得分:0)

::email::
inputbox, name
msgbox, %name%
return

从热门串中取出“dave”

测试后,将msgbox, %name%替换为您想要的任何发送行。