指南和概述
这个简短的介绍将帮助你马上开始编写你自己的宏和热键脚本。
指南目录
∙ 创建一个脚本
∙ 启动一个程序或文档
∙ 发送键击和鼠标点击
∙ 激活与操纵窗口
∙ 从用户使用的 MsgBox, InputBox 等命令来获取输入的数据
∙ 使用变量和剪贴板
∙ 一遍遍地重复一系列动作
∙ 操纵文件和文件夹
∙ 其他功能的概述
创建一个脚本
每个脚本都是一个包含命令的要被程序()执行的纯文本文件。一个脚本也可能包含热键和热字串input命令,甚至于全部由它们组成。不过,在没有热键和热字串时,一个脚本从它被启动时起,将从头至尾顺序地执行它的命令。
要创建一个新脚本:
1 打开 Windows 资源管理器并进入一个你选择的文件夹。
2 拉下文件菜单并选择 新建 >> AutoHotkey Script (或 新建 >> 文本文档)。
3 给文件键入一个名称,确保它以 .ahk 结尾。例如:Test.ahk
4 鼠标右键点击此文件并选择 Edit Script。
5 在一个新的空行,键入下述内容:
#space::le
#space::le
符号 # 表示 Windows 键,因此 #space 意味着按住 Windows 键然后按下空格键来激活一个热键。符号 :: 意味着每次按下此热键时,随后的命令将会被执行,在此例中将转到 Google 网站。要试用此脚本,按下述内容继续操作:
6 保存并关闭此文件。
7 在 Windows 资源管理器中,鼠标双击来启动脚本。一个新的系统托盘图标出现。
8 按住 Windows 键并按下空格键。一个网页在默认浏览器中打开。
9 要退出或编辑此脚本,鼠标右键点击它的系统托盘图标。
注意:多个脚本能被同时运行,每个带有它自己的托盘图标。此外,每个脚本能拥有多个热键和热字串。
启动一个程序或文档
Run 命令用来启动一个程序、文档、URL(统一资源定位符) 或者快捷方式。这里有一些普通的例子:
Run Notepad
Run C:\My Documents\Address List.doc
Run C:\My Documents\My Shortcut.lnk
Run www.yahoo
Run mailto:someone@somedomain
Run C:\My Documents\Address List.doc
Run C:\My Documents\My Shortcut.lnk
Run www.yahoo
Run mailto:someone@somedomain
一个热键通过包含一个热键标记能被分配给以上任何一个例子。在下面的第一个例子中,被分配的热键是 Win+N,而在第二个里是 Control+Alt+C:
#n::Run Notepad
^!c::
^!c::
上面的例子被称为单行热键,因为每个热键仅由单个命令组成。要通过一个热键执行多个命令,把首行放在热键定义的下面并让末行有一个 return。例如:
#n::
Run le
return
Run le
return
如果要运行的程序或文档没有与系统结合在一起,指定它的完整路径来使它启动:
Run %A_ProgramFiles%\
在上面的例子里,%A_ProgramFiles% 是一个内置变量。通过使用它而不是类似像 C:\Program Files,脚本将更便携,意味着它将很有可能在其他计算机上运行。注意:命令的名称和变量都不区分大小写。例如,"Run" 和 "run" 是一样的,而且 "A_ProgramFiles" 也和 "a_programfiles" 是一样的。
要让脚本在继续执行前等待程序或文档关闭,使用 RunWait 代替 Run。在下述例子中,MsgBox 命令将不会执行,直到用户关闭了记事本之后:
RunWait Notepad
MsgBox 用户已完成(记事本已被关闭)。
要学习更多关于启动程序的内容--像传递参数、指定工作目录和了解一个程序的退出代码--点击这里。
发送键击和鼠标点击
键击通过使用 Send 命令发送到活动的(最前面的)窗口。在下述例子中,Win+S 变为一个热键去键入一个签名(确保在按下 Win+S 前,像一个编辑器或起草信息的窗口是活动的):
#s::
Send Sincerely,{Enter}John Smith
return
Send Sincerely,{Enter}John Smith
return
在上面的例子里,所有的字符精确地发送,除了 {Enter},其模拟按下了 Enter 键。下一个例子说明了其他一些常用的特殊字符:
Send ^c!{tab}pasted:^v
上面这行发送了一个 Control+C 紧跟一个 Alt+Tab 紧跟字串 "pasted:" 紧跟一个 Control+V。要得到一个完整的特殊字符和按键的列表,请见 Send 命令。
最后,键击也能对你键入的缩写做出反应而被发送,这称为热字串。例如,每当你键入 Btw 紧跟一个空格或逗号,下述这行会把它替换为 "By the way":
::btw::by the way
鼠标点击:要对一个窗口发送一个鼠标点击,首先必须要定义将要点击的位置的 X 和 Y 坐标轴。这个能用 AutoScriptWriter 或 Window Spy 来完成,它们已包含在 AutoHotkey 中。下述步骤是适用于 Window Spy 的方法:
10 从脚本的托盘图标菜单或系统开始菜单启动 Window Spy。
11 通过鼠标点击感兴趣的窗口的标题栏、alt 标签栏或其他方法来激活窗口 (被设计好的 Window Spy 将处于 "置顶" )。
12 在目标窗口中移动鼠标指针到想要的位置并记下由 Window Spy 显示的鼠标坐标轴 (或按下 Shift-Alt-Tab 来激活 Window Spy 以便 "冻结的" 坐标轴能被复制和粘贴)。
13 在 Click 命令中使用上面发现的坐标轴。下述例子点击了鼠标左键:
Click 112, 223
Click 112, 223
要移动鼠标而不是点击,请用 MouseMove。要拖选鼠标,请用 MouseClickDrag。
激活与操纵窗口
要激活一个窗口 (使它在最前面),使用 WinActivate。要探测一个窗口是否存在,使用 IfWinExist 或 WinWait。下述的例子阐明了这些命令:
IfWinExist 无标题 - 记事本
{
WinActivate
}
else
{
WinActivate
}
else
{
Run Notepad
WinWait 无标题 - 记事本
WinActivate
}
Run Notepad
WinWait 无标题 - 记事本
WinActivate
}
上面的例子首先搜索标题以"无标题 - 记事本" (区分大小写) 开始的任何存在的窗口。如果这样的一个窗口被到,它将被激活。否则,记事本被启动并且脚本等待无标题窗口出现,那时它将被激活。上面的例子也运用了最近到的窗口来避免需要在每个 WinActivate 右边指定窗口的标题。
其他一些常用的窗口命令是:
∙ IfWinActive: 检查指定的窗口当前是否激活。
∙ WinWaitActive: 等待指定的窗口变为活动的窗口 (典型地使用在发送一个窗口激活键击之后,例如按下 Control-F 来“查”)。
∙ WinClose: 关闭指定的窗口。
∙ WinMove: 移动及(或)调整指定窗口的大小。
∙ WinMinimize, WinMaximize, WinRestore: 分别最小化、最大化或还原指定的窗口。
从用户使用的 MsgBox, InputBox 等命令来获取输入的数据
下述例子显示一个带两个按钮的对话框 (是 和 否):
MsgBox, 4, , 你想继续吗?
IfMsgBox, No
return
;否则,用户选择了是。
IfMsgBox, No
return
;否则,用户选择了是。
MsgBox 你按了是。
使用 InputBox 命令来提示用户键入一个字串。使用 FileSelectFile 或 FileSelectFolder 来让用户选择一个文件或文件夹。为了更高级的任务,使用 Gui 命令来创建自定义用户界面和数
据输入表单。
提示:你也许已经从其他例子中注意到任何命令的第一个逗号可以被省略 (除了当第一个参数为空或者命令是单独在一个连续部分的顶端) 。例如:
MsgBox 这是可以的。
MsgBox, 这也是可以的 (它有一个明显的逗号)。
MsgBox, 这也是可以的 (它有一个明显的逗号)。
使用变量和剪贴板
一个变量是脚本储存文本或数字的一个内存区域。尽管所有变量将它们的内容存为字符串,一个仅包含数位的变量会在一个数学运算或比较需要时,自动地转换为一个数字。相反地,当一个数学运算的结果需要被存进一个变量时会被转换回一个字串。
除了在函数里的局部变量外,所有变量都是全局的;就是说,它们的内容可以在脚本的任意部分被读取或更改。另外,变量不需要声明;它们只在使用它们时存在 (并且每个变量都以空或空白开始) 。
要指定一个字串给一个变量,参照这些例子:
MyVar1 = 123
MyVar2 = 我的字串
MyVar2 = 我的字串
要将一个变量的内容和一个数字或字串比较,参照这些例子:
if MyVar2 = 我的字串
{
MsgBox MyVar2 包含字串"我的字串"。
}
if MyVar1 >= 100
{
MsgBox MyVar1 包含 %MyVar1%,它是一个大于或等于 100 的数字。
}
{
MsgBox MyVar2 包含字串"我的字串"。
}
if MyVar1 >= 100
{
MsgBox MyVar1 包含 %MyVar1%,它是一个大于或等于 100 的数字。
}
在上面的 MsgBox 行, 注意那第二个出现的 MyVar1 被括在百分号内。它在那里显示了 MyVar1 的内容。相同的手法能用来复制一个变量的内容给另一个变量。例如:
MyVarConcatenated = %MyVar1% %MyVar2%
上面这行在变量 MyVarConcatenated 中储存了字串 "123 我的字串" (不含引号) 。
要比较一个变量和另一个变量的内容的用法,参考这个例子:
if (ItemCount > ItemLimit)
{
MsgBox 在 ItemCount 里的值,是 %ItemCount%,比 %ItemLimit% 大。
}
{
MsgBox 在 ItemCount 里的值,是 %ItemCount%,比 %ItemLimit% 大。
}
注意上面例子的首行包含圆括号。圆括号表示那 if-语句包含一个表达式。没有它们的话,那行将被认作一个“非表达式的 if-语句”,并且因此它将需要让 ItemLimit 以百分号围住。这样的 IF 语句被限制为一个单独的比较运算符;也就是说,它们不能包含数学运算符或者像 "AND" 和 "OR" 这样的联合运算符。
数学: 要执行一个数学运算,使用冒号-等号运算符 (:=) 来指定一个表达式的结果给一个变量, 像下面的例子:
NetPrice := Price * (1 - Discount/100)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论