Autohotkey帮助.docx
- 文档编号:10304701
- 上传时间:2023-02-10
- 格式:DOCX
- 页数:37
- 大小:37.60KB
Autohotkey帮助.docx
《Autohotkey帮助.docx》由会员分享,可在线阅读,更多相关《Autohotkey帮助.docx(37页珍藏版)》请在冰豆网上搜索。
Autohotkey帮助
版本v1.1.08.01
l.AutoH
©2003-2010ChrisMallett,portions
©AutoItTeamandtheAHKcommunity
SoftwareLicense:
GNUGeneralPublicLicense
警告:
由于在AutoHotkey和AutoHotkey_L之间存在一些根本的不同。
为AutoHotkey编写的脚本在AutoHotkey_L中可能不会像预期的那样工作。
对于已知的兼容性问题和解决方案的细节,参考如下:
●脚本兼容性:
UnicodevsANSI,DllCall,NumPut/Get,其他变化。
●脚本代码文件:
以UTF-8保存。
AutoHotkey,AutoHotkey_L和编译的脚本常常引发杀毒软件的误报。
更多的信息请查看FAQ社区。
快速参考
基本原理:
●初学者教程
●支持AutoHotkey的文本编辑器
●常见问答
●脚本
◆命令
◆变量和表达式
◆函数
◆对象
◆交互程序调试
键盘和鼠标:
●热键(鼠标,遥感和键盘快捷键)
●热字和自动取代
●重新映射建和按钮
●键,鼠标按钮和遥感控制列表
其他:
●DllCall
●正则表达式快速参考
●AutoHotkey_L特征
感谢
特别感谢JonathanBennett在1999年慷慨地将AutoItv2作为免费软件放出使它成为我和世界上其他人的灵感和节省时间的工具。
另外,一些AutoItv2控制台的AutoHotkey增强功能,像WindowSpy和旧的脚本编译器,直接改编于AutoItv3的源代码。
所以感谢Jon和其他AutoIt的作者。
最后,没有其他的这些个人AutoHotkey也不能成为今天的样子。
~ChrisMallett
教程概述
这份简介能帮助你马上开始撰写你自己的宏命令和热键。
⏹创建一个脚本
每一个脚本都是包含要被程序(AutoHotkey.exe)执行的命令的纯文本文件。
脚本也可能包含热键和热字,甚至完全由它们组成。
然而,缺乏热键和热字的脚本将会按从上到下的顺序执行它的命令在它被触发的瞬间。
创建一个新脚本:
1.下载并安装AutoHotkey。
2.右键桌面或你选择的文件夹的空白位置。
3.在弹出菜单中选择:
新建—〉AutoHotkeyScript。
4.输入文件名,确保由.ahk结尾。
例:
Text.ahk
5.右键文件选择编辑脚本。
6.在新的空行中键入:
#space:
:
Run
在上面这一行中,第一个字符“#”代表Windows键;所以#space表示按住Windows键然后按下空格键来激活热键。
:
:
表示后面的命令在热键被按下时执行,在这个例子中就是进入Google的网页。
尝试这个脚本,按如下继续:
1.保存并关闭文件。
2.双击文件来激活它。
一个新的图标出现在任务栏通知区。
3.按住windows键再按下空格键。
一个网页在默认的浏览器中打开。
4.要退出或编辑这个脚本,右键任务栏通知区的绿色“H”图标。
注释:
1.多个脚本能同时运行,每一个在任务栏通知域都有一个自己的图标。
2.每个脚本都能有多个热键和热字。
3.在开始菜单的启动文件夹里创建一个快捷方式可以让脚本在开机时自动启动。
打开一个程序或文档Run来打开一个程序,文档,URL或者快捷方式。
这里是一些命令的例子:
RunNotepad
RunC:
\MyDocuments\AddressList.doc
RunC:
\MYDocuments\MyShortcut.lnk
Run
Runmailto:
someone@
一个热键可以被分配给任何一个上述的例子通过包含一个热键标签。
下面的第一个例子的热键是Win+N,而第二个是Control+Alt+C:
#n:
:
RunNotepad
^!
c:
:
Runcalc.exe
上面的例子被称为单行热键因为每个都只包含一个命令。
若要通过一个热键执行多个命令则把热键的定义写在第一行之下,然后在在最后一行写上return。
例:
#n:
:
Run
RunNotepad.exe
return
如果要执行的程序或文档没有与系统集成,则指定它的完整路径来使它获得执行:
Run%A_ProgramFiles%\Winamp\Winamp.exe
上面这个例子,%A_ProgramFiles%是一个内置变量。
通过使用它而不是C:
\ProgramFiles脚本会更轻便,也意味着它更能在别的电脑上执行。
注意:
命令和变量的名字并不区分大小写。
例如:
“Run”跟“run”是一样的,“A_PromgramFiles”和“a_programfiles”是一样的。
用RunWait来代替Run可以使脚本在继续运行之前等待应用程序或文档关闭。
下面的例子中MsgBox命令在用户关闭Notepad之前不会执行:
RunWaitNotepad
MsgBoxTheuserhasfinished(Notepadhasbeenclosed).
了解更多的关于打开应用程序—例如传递参数,指定工作目录和发现程序退出代码—点击这里。
⏹发送击键和鼠标点击
使用Send命令能将击键发送到当前活动(居于最上层的)窗口。
在接下来的例子中,Control+Alt+S成为一个输入签名的热键(在按下之前确保类似于编辑或右键起草的窗口是活动的):
^!
s:
:
SendSincerely,{Enter}JohnSmith
Return
在上面的例子中所有的字符被逐一输入除了模拟按下回车的{Enter}。
下一个例子演示了一些其他的常用字符:
Send^c!
{tab}pasted:
^v
上面这一行发送了一个Control+C后跟Alt+Tab接着字符串“pasted”最后是Control+V。
查看Send命令关于特殊字符和快捷键的完整列表。
最后,击键也能通过你键入的缩略词发送,就是所谓热字。
例,无论何时你输入btw后接空格或逗号,下面这一行都会将它取代为“Bytheway”:
:
:
btw:
:
bytheway
鼠标点击:
发送鼠标点击给一个窗口,首先需要确定点击发生的X,Y的坐标。
这可以通过AutoHotkey附带的WindowSpy完成。
下面的步骤是应用WindowSpy的方法:
1.通过脚本的托盘图标菜单或开始菜单打开WindowSpy。
2.激活目标窗口通过点击它的标题栏,alt+tab切换或其他方法(WindowSpy会一直位于最前端。
)
3.移动鼠标光标到目标窗口需要的地方,写下WindowSpy显示的坐标(或者在WindowsXp和更早的版本中,按下Shirt+Alt+Tab来激活WindowsSpy以便冻结坐标使之能复制粘贴)。
4.用上面发现的坐标来使用Click命令,下面的例子点击鼠标左键:
Click112,233
移动鼠标而不点击则使用MouseMove。
拖拽鼠标用MouseClickDrag命令。
⏹激活和操作窗口
激活窗口(使它到最上层),使用WinActivate。
探测一个窗口是否存在可以使用IfWinExist或WinWait。
下面这个例子阐明了这些命令:
IfWinExistUntitled–Notepad
{
WinActivate
}
else
{
RunNotepad
WinWaitUntitled–Notepad
WinActivate
}
上面的例子首先搜索先现存的标题以Untitled-Notepad开头的窗口(区分大小写)。
如果发现这样的窗口则它被激活。
否则Notepad会被打开脚本会等待直到未命名的窗口出现同时激活它。
上述例子也利用了最后发现的窗口来避免在每一个WinActivate的右边指定窗口名。
其他的一些常用窗口命令:
●IfWinActive:
检查指定的窗口是不是目前的活动窗口。
●WinWaitActive:
等待指定的窗口被激活(通常用在发送活动窗口按键,如按下Control+F来查找)。
●WinClose:
关闭指定的窗口。
●WinCMove:
移动窗口和/或调整指定窗口大小。
●WinMinimize,WinMaxmize,WinRestore:
分别是最小化,最大化和还原指定窗口。
⏹通过消息框,输入框等得到用户的输入
下面的例子显示一个有两个按钮(YES和NO)的对话框:
MsgBox,4,,Wouldyouliketocontinue?
IfMsgBox,No
Return
;否则用户选择yes.
MsgBoxYoupressedYES.
使用InputBox命令提示用户输入字符串。
用FileSelectFileh或FileSelectFolder让用户选择一个文件或文件夹。
对于更高级的任务,使用Gui命令来定制数据输入表单和用户界面。
提示:
你可能从其他的例子注意到任何命令的第一个逗号可以省略(特别当第一个参数为空或由:
=或=开头,或命令是独自在一个有延续部分的顶部)。
例:
MsgBoxThisisok.
MsgBox,Thisisoktoo(ithasanexplicitcomma).
⏹使用变量和剪贴板
变量是一个脚本储存文本或数字的存储区域。
只包含数字(允许小数点)的变量会自动解释为数字,当一个数学操作或比较需要它的时候。
除了函数中的是局部变量,其余都是全局变量。
换言之,它们的值可以被脚本的任何部分读取或改变。
另外,变量不需要声明;要让它们存在很简单,就是使用它们(每个变量的初始值都为空)。
下面的例子是给变量分配一个字符串:
MyVar1=123
MyVar2=mystring
接下来的例子是变量值和字符串或数字的比较:
IfMyVar2=mystring
{
MsgBoxMyVar2containsthestring“mystring”.
}
IfMyVar1>=100
{
MsgBoxMyVar1contains%MyVar1%,whichisanumbergreaterthanorequalto100.
}
上面的Msgbox行注意到第二次出现的MyVar1在百分号里面。
这表示在该位置显示MyVar1的内容。
同样的技术能用来把一个变量的内容复制给另一个。
例:
MyVarConcatenated=%MyVar1%%MyVar2%
上面这一行给变量MyVarConcatenated存储了字符串”123mystring”(没有引号)。
变量值之间的比较参考这个例子:
If(ItemCount>ItemLimit)
{
MsgBoxThevalueinItemCount,whichis%ItemCount%,isgreaterthan%ItemLimit%
}
注意到第一行有括号,它表示if语句包含一个表达式。
否则会被认为是没有表达式的if语句,因此他需要给ItemLimit加上百分号(这样的if语句局限于单一的比较运算,也就是说,它不能包含数学操作或者像“AND”和“OR”的连接词)。
数学:
执行一个数学操作要用冒号-等号操作符(:
=)来分配表达式的结果给一个变量,例:
NetPrice:
=Price*(1-Discount/100)
查看完整数学操作符列表的表达式。
剪贴板:
变量Clipboard是特别的,因为它包含了当前windows剪贴板中的文本。
尽管如此,它也能像一个普通变量那样使用。
例如下面这一行可显示现在剪贴板中的内容:
MsgBox%clipboard%
要改变剪切板内容参考下面的例子,用新的文本取代当前内容:
clipboard=Alineoftext.`r`nAsecondlineoftext.`r`n
上面,‘r和‘n(重音符号后跟字母“r”或者“n”)用来表示两个特殊字符:
回车和换行。
这两个字符开始一个新的文本行就像用户按下回车键一样。
给clipboard(或其他任意变量)附加文本的例子:
Clipboard=%clipboard%Andhereisthetexttoappend.
查看剪贴板和变量部分的更多细节。
⏹重复一系列动作
用loop执行不止一次的连续命令。
下面的loop会显示消息框3次:
Loop3
{
MsgBoxthiswindowwillbedisplayedthreetimes.
}
你也能在Loop后指定一个变量,这对于迭代次数取决于某个部分的脚本的情况很有用:
Loop%RunCount%
{
RunC:
\CheckServerStatus.exe
Sleep60000;等待60秒。
}
上面,loop执行指定的次数除非RunCount为0,这种情况下loop将完全跳过。
Loop也可以自己停止当一些条件改变的时候。
下面的例子,当用户按住F1时会一直点击鼠标左键:
$F1:
:
;使F1成为热键($符号促进下面GetkeyState的“P”模式)。
Loop;因为没有指定数字,这是一个无限循环除非在里面遇到“break”或者“return”。
{
ifnotGetKeyState(“F1”,”P”);如果用户释放了F1键则这句为真。
break;退出循环。
;否则(即没有上面的“break”),继续点击鼠标。
Click;在光标当前位置点击鼠标左键。
}
return
上面的例子中,当loop发现用户释放F1键并通过break命令停止循环。
Break导致跳出并执行loop的关闭括号后的语句。
一个替换方式可以完成同样的结果那就是“while”循环:
$F1:
:
WhileGetKeyState(“F1”,”P”);当F1键被按着的时候
{
Click
}
return
上面展示的是一般的循环。
更多专门用途,考虑下面的循环:
文件读取/编写循环:
在文本文件中检索行,一次一个。
这能用于在逐行的基础上把文件转换成不同的格式。
这也能用来搜索符合条件的行。
文件和文件夹循环:
检索指定文件或文件夹,一次一个。
这能使操作在每一个符合条件的文件或文件夹上执行。
解析循环:
检索包含子字符串的字符串,一次一个。
这能使一个像“Red,Green,Blue”的字符串简单的分解成它的三个组件字段。
注册表循环:
检索指定的注册表项,一次一项。
⏹操作文件和文件夹
在文件最后添加文本(或创建一个新文件),像下面的例子展示的那样使用FileAppend。
注意,它使用‘n(换行)来在文本后面开始一个新行:
FileAppend,Alineoftexttoappend.`n,C:
\MyDocuments\MyTextFile.txt
重写现有的文件,在FileAppend之前用FileDelete。
例:
FileDelete,C:
\MyDocuments\MyTextFile.txt
其他的一些常用文件和文件夹命令:
●FileRead:
读取文件的全部内容到一个变量。
●文件读取循环:
在文本文件中检索行,一个接一个。
●IfExist:
判断一个文件或文件夹是否存在。
●FileSelectFile和FileSelectFolder:
显示一个对话框让用户选择一个文件或文件夹。
●FileDelete/FileRecycle:
删除/恢复一个或几个文件。
用FileRemoveDir删除整个文件夹。
●FileCopy/FileMove:
复制/移动一个或几个文件。
用FileCopyDir/FileMoveDir来复制/移动整个文件夹。
●文件和文件夹循环:
检索文件夹中的文件或文件夹,一次一个。
●FileSetAttrib和FileSetTime:
改变一个或多文件的属性或时间戳。
●IniRead,IniWrite,IniDelete:
创建,访问和维护标准ini格式文件。
●RegRead,RegWrite,RegDelete和注册表循环:
Windows注册表的操作。
⏹其他特征的概述:
在命令列表中查看每个命令的概述。
常见问答(FAQ)
如果你的问题不在下面的列表里,查看社区维护的AutoHotkeyWiKi的FAQ
⏹语法
什么时候引号被用于命令和它的参数?
双引号(”)只在表达式中有特殊含义。
在其他地方,他们像普通字符一样按照字面上的意思对待。
然而,当脚本打开一个程序或文件时,操作系统通常需要给任何包含空格的命令行参数加上引号,像这样:
Run,Notepad.exe“C:
\MyDocuments\AddressList.txt”
什么时候把变量名放在百分号内是正确的?
变量名总是要包含在百分号内除非下面粗体表示的情况:
1)参数是输入,输出变量:
StringLen,OutputVar,InputVar
2)在一项任务的左边:
Var=123abc
3)在传统的(无表达式)if语句左边:
IfVar1<%Var2%
4)表达式的任何地方,例:
If(Var1<>Var2)
Var1:
=Var2+100
什么时候百分号和逗号该转义?
字面上的百分号必须通过在前面加上重音符号来转义。
例:
MsgBoxThecurrentpercentageis25`%.
字面意义上的逗号也必须转意(‘,)除非用在消息框或任何命令的最后一个参数(这种情况下重音符号是允许的,但不必要)。
当逗号或百分号在表达式里被引号引用时,同样允许重音符号但不必要。
例:
Var:
=“15%”
⏹常见任务
为什么我脚本里有些行从不执行?
任何你想在脚本开始时就立即执行的行应该出现在脚本的最上面,第一个热键,热字或Return之前。
详见自动执行部分。
另外,要执行超过一行的热键必须将第一行放在热键的后面,而不是同一行。
例:
#space:
:
;Win+空格
RunNotepad
WinWaitActiveUntitled–Notepad
WinMaximize
return
为什么Run命令不能打开我的游戏或程序?
一些程序需要在他们自己的目录里被打开(不能确定的时候,通常最好这么做)。
例:
Run,%A_ProgramFiles%\SomeApplication\App.exe,%A_ProgramFiles%\SomeApplication
怎么检索命令行操作的输出?
测试表明由于文件缓存,对于相对小的输出,临时文件可以很快。
事实上,如果文件使用后立即删除,它通常不会真的被写入磁盘中。
例:
RunWait%comspec%/cdir>C:
\MyTempFile.txt
FileRead,VarToCotainContents,C:
\MyTempFile.txt
FileDelete,C:
\MyTempFile.txt
避免使用一个临时文件(特别是大的输出)考虑使用CmdRet或StdoutToVar。
一个脚本怎么关闭,暂停或禁用其他脚本?
首先,这是一个关闭另一个脚本的例子:
DetectHiddenWindowsOn;允许一个脚本的隐藏主窗口被检测到。
SetTitleMatchMode2;避免指定下面文件的完整路径的需要。
WinCloseScript’sFileName.ahk–AutoHotkey;映射脚本名来更新(大小写敏感)。
禁用或暂停另一个脚本,用这些替换上面的最后一行:
PostMessage,0x111,65305,,,Script'sFileName.ahk–AutoHotkey;禁止。
PostMessage,0x111,65306,,,Script’sFileName.ahk–AutoHotkey;暂停。
怎么停止重复动作而不退出脚本?
按一个键来暂停或继续整个脚本,像下面的例子一样给Pause命令分配一个热键:
^!
p:
:
Pause;按下Ctrl+Alt+P来暂停。
再按一次恢复。
要停止一个在Loop里重复的动作,参考这个用一个既是开始也是停止自身重复动作的热键的例子。
换句话说,按下这个热键一次开始循环,再按一次就停止。
#MaxTreadsPerHotkey3
#z:
:
;Win+Z热键(改变这个热键为你自己的首选项)。
#MaxThreadsPerHotkey1
ifKeepWinZRunning;这意味着一个潜在的线程已经在运行下面的循环。
{
KeepWinZRunning:
=false;循环停止的信号。
return;结束该线程以便下面的一个线程继续并查看上面这一行做的改变。
}
;否则:
KeepWinZRunning:
=ture
Loop
{
;下面的四行是你想重复的动作(修改他们以满足你的需要):
ToolTip,PressWin-Zagaintothisformflashing.
Sleep1000
ToolTip
Sleep1000
;下面的不需要要更改。
ifnotKeepWinZRunning;用户再次按下Win+Z通知循环停止。
break;跳出循环。
}
KeepWinZRunning:
=false;为下次按下热键而重置。
return
怎么提高性能当游戏或其他cpu负载较高的时候?
在cpu高负载的时候如果脚本的热键,点击或者发送明显地比正常情况下慢,提高脚本的优先级可能会有帮助。
为此,在脚本的上方包含下面这一行:
Process,Priority,,High
AutoHotkey命令的内容敏感帮助怎么用在任意编辑器中?
Rajat创作了这个脚本。
怎么探测网页完成加载?
对于IE也许最可靠的方法是使用DllCall和COM,演示:
相关注意,地址栏和状态栏的内容可以被检索,演示:
较老的,不那么可靠的方法:
下面的例子展示的方法在用IE打开的大部分页面可用。
类似的技术在其他浏览器可能有用:
Run,
MouseMove,0,0;防止状态栏显示一个鼠标悬停的链接而不是“已完成”。
WinWait,yahoo!
-
WinActivate
StatusBarWait,Done,30
ifErrorLevel
MsgBoxThewaittimedoutorthewindowwasclosed.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Autohotkey 帮助