2013-03-19 91 views
4

我正在尝试创建一个脚本,它将采用一个名称并将其添加到预先写好的文本块中。如何在AutoHotKey中声明一个热点内的变量?

从本质上讲,我想写“emailDave”,并有戴夫插入文本字符串,然后被发送的名称。我只是不确定如何以这种方式修改热点字符串。

我目前使用的名称要求使用的InputBox并插入名称到文本的方法。这在桌面上工作得很好,但我使用的是Windows 8,出于某些可怕的原因,InputBox不会在应用内显示(即在桌面模式之外)。

我知道一定是用文字I输入“电子邮件VS emailDave”影响,而不是把我与这个InputBox中追逐鹅变量的方式。

这就是说,如果有人知道在Windows 8的应用程序(特别是邮件)显示的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 
+0

InputBox代码在Windows 8中对我来说工作正常。你确定你的AutoHotkey是以Admin身份运行吗?这[链接](http://geekswithblogs.net/deadlydog/archive/2012/09/10/autohotkey-cannot-interact-with-windows-8-windowshellipor-can-it.aspx)向您展示了如何。 – 2013-03-19 18:42:39

+0

InputBox代码在桌面模式下也适用于我,但是您是否可以在Mail应用程序中使用hotkey :: email ::而不要求它回到InputBox的桌面?我希望InputBox出现在邮件应用程序(或任何应用程序,就此而言)的顶部。 – 2013-03-19 18:47:35

+0

另外,是的,我以管理员身份运行(尽管我将使用您发布的教程使其自动发生)。 – 2013-03-19 18:48:36

回答

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 {}输入” 或 “emailRobert {}输入” 均可以得到:

嗨罗伯特,

示例文本。

感谢,
扎克

和电子邮件{空白}会给电子邮件{空白}。

+0

谢谢,但那不适合我。任何其他选项?是的,我只使用“电子邮件”作为本论坛的样本。这是一个独特的字符串。 – 2013-03-19 18:56:48

+0

出于某种原因,每次我使用?*方法尝试这一个(以任何方式)时,我输入的单词立即消失(如“email”)并且键盘停止运行,直到我强制退出AHK?这是我的目标吗? 并表示道歉并不明确:脚本似乎没有像应该那样工作。 (见上) – 2013-03-19 19:10:47

+0

这是你的问题。您使用的是哪个版本的AHK?电子邮件字样立即消失,并且接收者的姓名被输入为“盲目”,但只要您按下[Enter]或[Esc]键,AHK就会“释放”键盘。你有没有检查艾略特的解决方案,看起来很有希望。 – 2013-03-19 19:17:32

1

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

保存在含AutoHotkey.exe里面的文件夹是链接到你的lib文件夹中的文件(创建如有必要)。

在本例中,输入emailJohn后跟空格

#Include lib\DynamicHotstrings.ahk 

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

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

感谢您的帮助!我现在要避免使用任何外部库 - 我希望掌握(尽我所能)AHK的基本知识,并从那里继续。多谢! – 2013-03-19 19:21:52

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

以 “戴夫” 出来的热字串

你测试后,用任何你想要发送线路更换MSGBOX,%名字%。

+0

您的解决方案完美适用于例如Windows 7,但Zach写道,在Windows 8中,当他运行这个“应用程序内”(tile)时,inputbox(或任何其他常规窗口)不起作用。这就是为什么我们必须找到解决这个Windows 8特定问题的解决方案。 – 2013-03-21 19:01:23