AutoHotkey初级教程

AutoHotkey初级教程
AutoHotkey初级教程

指南和概述

这个简短的介绍将帮助你马上开始编写你自己的宏和热键脚本。

指南目录

?创建一个脚本

?启动一个程序或文档

?发送键击和鼠标点击

?激活与操纵窗口

?从用户使用的MsgBox, InputBox 等命令来获取输入的数据

?使用变量和剪贴板

?一遍遍地重复一系列动作

?操纵文件和文件夹

?其他功能的概述

创建一个脚本

每个脚本都是一个包含命令的要被程序(AutoHotkey.exe)执行的纯文本文件。一个脚本也可能包含热键和热字串,甚至于全部由它们组成。不过,在没有热键和热字串时,一个脚本从它被启动时起,将从头至尾顺序地执行它的命令。

要创建一个新脚本:

1打开Windows 资源管理器并进入一个你选择的文件夹。

2拉下文件菜单并选择新建>> AutoHotkey Script (或新建>> 文本文档)。

3给文件键入一个名称,确保它以.ahk结尾。例如:Test.ahk

4鼠标右键点击此文件并选择Edit Script。

5在一个新的空行,键入下述内容:

#space::Run https://www.360docs.net/doc/259858294.html,

符号# 表示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 https://www.360docs.net/doc/259858294.html,

Run mailto:someone@https://www.360docs.net/doc/259858294.html,

一个热键通过包含一个热键标记能被分配给以上任何一个例子。在下面的第一个例子中,被分配的热键是Win+N,而在第二个里是Control+Alt+C:

#n::Run Notepad

^!c::Run calc.exe

上面的例子被称为单行热键,因为每个热键仅由单个命令组成。要通过一个热键执行多个命令,把首行放在热键定义的下面并让末行有一个return。例如:

#n::

Run https://www.360docs.net/doc/259858294.html,

Run Notepad.exe

return

如果要运行的程序或文档没有与系统结合在一起,指定它的完整路径来使它启动:

Run %A_ProgramFiles%\Winamp\Winamp.exe

在上面的例子里,%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

在上面的例子里,所有的字符精确地发送,除了{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

要移动鼠标而不是点击,请用MouseMove。要拖选鼠标,请用MouseClickDrag。

激活与操纵窗口

要激活一个窗口(使它在最前面),使用WinActivate。要探测一个窗口是否存在,使用IfWinExist或WinWait。下述的例子阐明了这些命令:

IfWinExist 无标题- 记事本

{

WinActivate

}

else

{

Run Notepad

WinWait 无标题- 记事本

WinActivate

}

上面的例子首先搜索标题以"无标题- 记事本" (区分大小写) 开始的任何存在的窗口。如果这样的一个窗口被找到,它将被激活。否则,记事本被启动并且脚本等待无标题窗口出现,那时它将被激活。上面的例子也运用了最近找到的窗口来避免需要在每个WinActivate 右边指定窗口的标题。

其他一些常用的窗口命令是:

?IfWinActive: 检查指定的窗口当前是否激活。

?WinWaitActive: 等待指定的窗口变为活动的窗口(典型地使用在发送一个窗口激活键击之后,例如按下Control-F 来“查找”)。

?WinClose: 关闭指定的窗口。

?WinMove: 移动及(或)调整指定窗口的大小。

?WinMinimize, WinMaximize, WinRestore: 分别最小化、最大化或还原指定的窗口。

从用户使用的MsgBox, InputBox 等命令来获取输入的数据下述例子显示一个带两个按钮的对话框(是和否):

MsgBox, 4, , 你想继续吗?

IfMsgBox, No

return

;否则,用户选择了是。

MsgBox 你按了是。

使用InputBox命令来提示用户键入一个字串。使用FileSelectFile或FileSelectFolder来让用户选择一个文件或文件夹。为了更高级的任务,使用Gui命令来创建自定义用户界面和数据输入表单。

提示:你也许已经从其他例子中注意到任何命令的第一个逗号可以被省略(除了当第一个参数为空或者命令是单独在一个连续部分的顶端) 。例如:

MsgBox 这是可以的。

MsgBox,这也是可以的(它有一个明显的逗号)。

使用变量和剪贴板

一个变量是脚本储存文本或数字的一个内存区域。尽管所有变量将它们的内容存为字符串,一个仅包含数位的变量会在一个数学运算或比较需要时,自动地转换为一个数字。相反地,当一个数学运算的结果需要被存进一个变量时会被转换回一个字串。

除了在函数里的局部变量外,所有变量都是全局的;就是说,它们的内容可以在脚本的任意部分被读取或更改。另外,变量不需要声明;它们只在使用它们时存在(并且每个变量都以空或空白开始) 。

要指定一个字串给一个变量,参照这些例子:

MyVar1 = 123

MyVar2 = 我的字串

要将一个变量的内容和一个数字或字串比较,参照这些例子:

if MyVar2 = 我的字串

{

MsgBox MyVar2 包含字串"我的字串"。

}

if MyVar1 >= 100

{

MsgBox MyVar1 包含%MyVar1%,它是一个大于或等于100 的数字。

}

在上面的MsgBox 行,注意那第二个出现的MyV ar1被括在百分号内。它在那里显示了MyV ar1的内容。相同的手法能用来复制一个变量的内容给另一个变量。例如:

MyVarConcatenated = %MyVar1% %MyVar2%

上面这行在变量MyVarConcatenated 中储存了字串"123 我的字串" (不含引号) 。

要比较一个变量和另一个变量的内容的用法,参考这个例子:

if (ItemCount > ItemLimit)

{

MsgBox 在ItemCount 里的值,是%ItemCount%,比%ItemLimit% 大。

}

注意上面例子的首行包含圆括号。圆括号表示那if-语句包含一个表达式。没有它们的话,那行将被认作一个“非表达式的if-语句”,并且因此它将需要让ItemLimit 以百分号围住。这样的IF 语句被限制为一个单独的比较运算符;也就是说,它们不能包含数学运算符或者像"AND" 和"OR" 这样的联合运算符。

数学: 要执行一个数学运算,使用冒号-等号运算符(:=) 来指定一个表达式的结果给一个变量,像下面的例子:NetPrice := Price * (1 - Discount/100)

请见表达式来获得一个完整的数学运算符列表。

剪贴板: 名为Clipboard的变量是特殊变量,因为它包含了当前Windows 剪贴板里的文本。即使如此,它也能像一个普通变量被使用。例如,下面这行将显示当前剪贴板的内容:

MsgBox %clipboard%

要改变剪贴板内容,参考下述例子,它用新的文本替换了当前剪贴板里的内容:

clipboard = 一行文本。`r`n第二行文本。`r`n

在上面这行,`r 和`n (重音符紧跟着字母"r" 或"n") 被用来标明两个特殊的字符:回车和换行。这两个字符重新开始一个文本行就像用户按下了Enter 键。

要追加文本到剪贴板(或任何其他变量),参照这个例子:

clipboard = %clipboard% 这里是追加的文本。

详见剪贴板和变量章节。

一遍遍地重复一系列动作

要连续地不止一次执行某物,一个loop就是答案。下述loop 显示了三次MsgBox:

Loop 3

{

MsgBox 此窗口将被显示三次。

}

你也能在单词Loop 后面指定一个变量,它在脚本内部的某处其循环的次数被定义时是有用的:

Loop %RunCount%

{

Run C:\Check Server Status.exe

Sleep 60000 ;暂停60 秒。

}

在上面例子里,loop 将执行指定的次数,除非RunCount 是0,在这种情况下,loop 整个被跳过。

一个loop 也可以终止它自己,当一个或多个条件改变时。下述例子重复地点击鼠标左键,当用户按住F1 键时:$F1:: ;让F1 键成为一个热键( $ 符号有助于下面GetKeyState 的"P" 模式)。

Loop ;由于没有指定数字给它,这是一个无限循环,除非在内部碰到"break" 或"return"。

{

if not GetKeyState("F1", "P") ;如果此状态为真,则用户已经物理地释放了F1 键。

break ;打破循环。

;否则(由于上面没有"打破"),保持点击鼠标左键。

Click ;在当前光标位置点击鼠标左键。}

return

上面的例子和一个有时称为"while...do" 的循环在功能上相同。短语"while...do" 指的是当某个或某些条件仍然为真时,此循环重复地做某事的事实。在本例中,当F1 键被按住的时候,此循环继续点击鼠标左键。当用户释放F1 键时,此循环探测到此动作并通过break命令终止了它自己。Break引起执行跳到循环的闭合大括号的下一行。

上面给出的例子是一般用途的循环。为了更具体的需要,可参考下述的某个循环:

文件读写循环: 在一个文本文件内一次检索一行。此命令能用来在一行行的基础上将一个文件转换成不同的格式。它也能被用来按你的标准逐行搜索。

文件和文件夹循环: 一次检索一个指定的文件或文件夹。它允许每个文件或文件夹执行一个满足你的标准的操作。

分解循环: 从一个字串里一次检索一个子字串。它允许一个像"红、绿、蓝" 这样的字串被简单地打断成它的三个组成部分。

注册表循环: 一次检索一个指定的注册表子键的内容。

操纵文件和文件夹

要添加文本到一个文件的末尾(或创建一个新文件),使用在下述例子里出现的FileAppend。注意它在后面使用`n (换行) 来启用一个新的文本行:

FileAppend, 添加一行文本。`n, C:\My Documents\My Text File.txt

要覆盖一个存在的文件,在FileAppend 之前使用FileDelete。例如:

FileDelete, C:\My Documents\My Text File.txt

其他一些常用的文件和文件夹命令是:

?FileRead: 读取一个文件的整个内容给一个变量。

?文件读取循环: 在一个文本文件里逐行检索。

?IfExist: 根据一个文件或文件夹的是否存在而做出决定。

?FileSelectFile和FileSelectFolder: 为用户选择一个文件或文件夹显示一个对话框。

?FileDelete/FileRecycle: 删除或回收一个或多个文件。使用FileRemoveDir来删除一整个文件夹。

?FileCopy/FileMove: 复制或移动一个或多个文件。使用FileCopyDir/FileMoveDir来复制或移动一整个文件夹。

?文件和文件夹循环: 一次检索一个被包含在一个文件夹下的文件和文件夹。

?FileSetAttrib和FileSetTime: 改变一个或多个文件的属性或时间标记。

?IniRead, IniWrite和IniDelete: 创建、访问和修改标准格式的INI 文件。

?RegRead, RegWrite, RegDelete和Registry Loop: 和Windows 注册表一起工作。

相关主题
相关文档
最新文档