AHK使用手记--Run/RunWait指令

来源:互联网 发布:淘宝分销入口 编辑:程序博客网 时间:2024/04/30 19:27

翻自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:someone@domain.com?subject=This is the subject line&body=This is the message body's text.

;向someone@domain.com发送一封标题为"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:someone@somedomain.com ; 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

原创粉丝点击