翻自AHK用户手册
2008年3月4日星期二
9:35
Runs an external program. Unlike Run, RunWait will wait until the program finishes before continuing.
Run, Target [, WorkingDir, Max|Min|Hide|UseErrorLevel, OutputVarPID]
Target:
1.可以是文档、URL、可执行文件(.exe,.com,.bat,etc.),快捷方式(.lnk),或者是系统动作(system verb).(见下面的说明)
2.如果Target是没有指定路径的本地文件,AHK或先搜索A_WorkingDir变量指定的路径;如果在该路径内没有找到相匹配的文件,系统会从全局查找并装载,比如其包含在PATH路径中。
3.如果要加参数,只要把它们直接跟在程序名或文档名的后面即可。如果参数中包含空格,最安全的做法是将它们放入双引号中(尽管有些时候没有加双引号也可以正确运行)
WorkingDir
1.待装载项目所在的路径;
2.不要将路径包含在双引号中,即便其包含空格;
3.如果忽略该参数,系统会默认使用脚本自身的工作目录(A_WorkingDir变量指定)
Max|Min|Hide
UseErrorLevel
1.如果忽略,Target 会按默认配置导入;
2.作为选择,可使用如下一个或多个关键词:
Max:按最大化载入
Min:按最小化载入
Hide:按隐藏载入(不能与上面的任一个搭配使用)
注意:某些程序(比如计算器),不会接收启动设置,所以在其后加上Max/Min/Hide参数是无效的
3.UserErrorLevel:
UseErrorLevel can be specified alone or in addition to one of the above words (by separating it from the other word with a space).
如果载入错误,该选项会略去错误对话框,同时将ErrorLevel的值赋为Error,然后允许当前线程(current thread)继续执行下去。
如果成功载入,RunWait指令会将ErrorLevel变量的值设置为程序的退出代码,而Run指令会将ErrorLevel变量的值置为零。
如果指定了UserErrorLevel参数,A_LastError变量的值会被置为系统函数GetLastError()所返回的结果。A_LastError 变量是一个介于0到4294967295 的号码(它通常被格式化为十进制,而非十六进制)。零(Zero)意味着成功,所有其它的号码意味着载入失败。每一个号码都与某一个特定的错误情形相对应(可以通过在微软官方网站www.microsoft.com中搜索"System error codes"来获取一个错误代码对照列表)。与ErrorLevel变量相似,A_LastError变量是每个线程都拥有的设置;也就是说,当某一线程被其它的线程中断的时候,它将不会被改变。但是,A_LastError变量同时可以被DllCall函数设置。
OutputVarPID
1.该变量用于存储最近装载的程序的唯一的标识符(Process ID(PID)).
2.如果PID值无法确定,该变量会被置空(blank);这通常发生在装载一个系统动作(System Verb)、文档或快捷方式(而非某一直接的可执行文件)时.
3.RunWait指令也支持该参数,尽管它的OutputVarPID必须在另一个线程中登记otherwise, the PID will be invalid because the process will have terminated by the time the line following RunWait executes).
4.当Run指令得到一个PID的时候,也许并非进程创建的所有窗口都已经关闭了。
使用 WinWait ahk_pid %OutputVarPID% 语句等待至少有一个窗口已经被创建。
Run指令:run指令不会设置ErrorLevel变量除非UseErrorLevel变量是有效的。如果那样的话,ErrorLevel变量会置为Error(出错时)或零(成功时)
RunWait指令:runwait指令将ErrorLevel变量的值设置为程序的退出代码(一个32位的带符号整数)。如果UseErrorLevel变量有效并且出现装载失败,它将存储ERROR值。
Remarks
不像Run指令,RunWait指令会等待Target参数指定的内容关闭或退出后执行,那时ErrorLevel变量的值会被赋为程序的退出代码(一个带符号的32为整数)。某些程序似乎会立即返回(退出代码),尽管它们实际上还在运行。这种程序产生了另一个进程。
如果Target 参数包含了任何逗号,它们(逗号)必须使用转移字符来表示(下面的例子中出现了3此):
Run rundll32.exe shell32.dll`,Control_RunDLL desk.cpl`,`, 3 ; Opens Control Panel > Display Properties > Settings
P.S.在"运行"中执行的实际效果为:
rundll32.exe shell32.dll,Control_RunDLL desk.cpl,, 3
P.s. 3是"设置"分页的编号,延伸:试试如下指令:
Run rundll32.exe shell32.dll`,Control_RunDLL desk.cpl`,`, 2
Run rundll32.exe shell32.dll`,Control_RunDLL desk.cpl`,`, -1
……
当通过ComSpec指令(即cmd.exe)运行某程序时(也许你需要重定向该程序的输入或输出),如果执行的路径名称中包含空格,那么整个路径外面应该包含一对双引号。在下面的例子中,外层的双引号使用了红色进行标识,内层的双引号使用黑色标识。
Run %comspec% /c ""C:\My Utility.exe" "param 1" "second param" >"C:\My File.txt""
如果Target是一个精确的路径,执行效率会得到轻微的改良。例如:Run, C:\Windows\Notepad.exe "C:\My Documents\Test.txt" 优于 Run, C:\My Documents\Test.txt
特定的CLSID目录可能可以通过Run直接打开,例如:
Run ::{20d04fe0-3aea-1069-a2d8-08002b30309d} ; 打开“我的电脑”
Run ::{645ff040-5081-101b-9f08-00aa002f954e} ; 打开“回收站”
系统动作(System verbs)与在资源管理器中文件的右键菜单想对应。如果某个文件没有指定verb进行加载,系统会使用该文件的默认verb(通常是"打开")。如果指定了verb,verb应该跟随在目标文件名的后面。目前支持如下verbs:
Properties:显示相应文件的属性对话框。注:该对话框会在script终止时自动关闭。要想改变该情况,可以先使用WinWait指令等待窗口出现,然后使用WinWaitClose指令等待用户关闭该窗口
- Find:打开相应目录的"查找"窗口
- Explorer:在资源管理器中打开相应目录
- edit:编辑该文件。如果没有指定给类文件的"Edit"属性就不会起作用。
- open:打开该文件。(通常不需要,因为这是大多数类型文件的默认操作)
- Print:打印该文件。
当RunWait指令处于等待状态的时候,新线程可以通过热键(hotkey),自定义菜单(custom menu item)或定时器(timer)载入。
示例:
Run, Notepad.exe, C:\My Documents, max ;最大化打开记事本,默认目录设为C:\My Documents
Run, mailto:[email protected]?subject=This is the subject line&body=This is the message body's text.
;向[email protected]发送一封标题为"This is the subject line",内容为"This is the message body"的邮件
Run, ReadMe.doc, , Max UseErrorLevel ;
;最大化打开ReadMe.doc(先在该脚本所在的目录下搜索该文件,如果没有找到在到Path环境变量中指定的路径中去搜索该文件),忽略错误提示(如果操作成功,将零保存到ErrorLevel变量中,如果操作失败,将ERROR保存到ErroeLevel变量中)
if ErrorLevel = ERROR
MsgBox The document could not be launched.
;如果ErrorLevel的值等于ERROR,弹出提示窗口
RunWait, %comspec% /c dir c:\ >>c:\DirTest.txt, , min
;将C:\下的目录树输出到C:\DirTest.txt文件中,最小化执行
;对于cmd指令:如果指定了 /C 或 /K,命令行开关后的命令行其余部分将作为命令行处理,更多帮助参加cmd /?
Run, c:\DirTest.txt
Run, properties c:\DirTest.txt
;打开C:\DirTest.txt的属性窗口
Run, www.autohotkey.com ; i.e. any URL can be launched.
Run, mailto:[email protected] ; This should open the default e-mail application.
Run ::{20d04fe0-3aea-1069-a2d8-08002b30309d} ; Opens the "My Computer" folder.
Run ::{645ff040-5081-101b-9f08-00aa002f954e} ; Opens the Recycle Bin.
; To run multiple commands consecutively, use "&&" between each:
Run, %comspec% /c dir /b > C:\list.txt && type C:\list.txt && pause