Run

首页  后退  前进

Run
down2

Run

运行外部程序.

 

Run ( "program" [, "workingdir" [, show_flag [, opt_flag]]] )

参数

program

运行程序的完整路径(文件类型: EXE, BAT, COM, 或 PIF. 见备注)

workingdir

[可选] 工作目录. 空白("")使用当前工作目录. 这不是程序的路径.

show_flag

[可选] 程序执行时的显示状态:

@SW_HIDE = 隐藏窗口 (或使用关键字 Default)

@SW_MINIMIZE = 最小化窗口

@SW_MAXIMIZE = 最大化窗口

opt_flag

[可选] 指定控制父进程与子进程互动的标志.

   $STDIN_CHILD (0x1) = 提供句柄到子进程的 STDIN 流

   $STDOUT_CHILD (0x2) = 提供句柄到子进程的 STDOUT 流

   $STDERR_CHILD (0x4) = 提供句柄到子进程的 STDERR 流

   $STDERR_MERGED (0x8) = 为 STDOUT 与 STDERR 提供相同的句柄. 也就是 $STDOUT_CHILD 与 $STDERR_CHILD 标志.

   $STDIO_INHERIT_PARENT (0x10) = 提供子和父的 STDIO 流. 这个标志不能和任何其它 STDIO 标志结合. 提供子和父的 STDIO 流. 这个标志不能和任何其它 STDIO 标志结合.

   $RUN_CREATE_NEW_CONSOLE (0x10000) = 子控制台进程应设立自己的窗口, 而不是使用父窗口. 当父层作为控制台应用被编译时, 这个标志非常有用.

 

常量定义在 AutoItConstants.au3

返回值

成功:

返回运行程序的 PID(进程标识符).

失败:

返回 0, @error 被设置为非 0 值.

备注

如果路径包含空格, 必须添加英文引号.

 

运行 DOS(控制台)命令, 请使用 Run(@ComSpec & " /c " & 'commandName', "", @SW_HIDE)    ; 不要忘了 "/c" 前面的一个空格

 

程序运行后脚本将继续执行后面的语句. 要暂停脚本的执行, 直到程序完成, 请使用 RunWait() 函数代替.

 

提供 StderrRead(), StdinWrite()StdoutRead() 函数的标准 I/O 参数与正确的特征值, 可以与子进程互动.

结合标志值(或使用 $STDERR_CHILD, $STDIN_CHILD & $STDOUT_CHILD, 由 Constants.au3 文件定义) 管理多个数据流.

 

使流关闭, 必须满足以下条件:

1) 子进程结束则关闭流(这种情况发生在子进程关闭时).

2) AutoIt 必须读出任何被捕获的流, 直到没有更多的数据存在.

3) 如果为子进程提供了 STDIN 流, 必须调用 StdinWrite() 关闭该流. 一旦检测到所有不再需要的流, 将自动释放所有内部资源.

 

StdioClose() 可用于强制关闭 STDIO 流.

 

函数示例

Example()
Func Example()
    ; Run Notepad with the window maximized.
    Local $iPID = Run("notepad.exe", "", @SW_SHOWMAXIMIZED)
    ; Wait 10 seconds for the Notepad window to appear.
    WinWait("[CLASS:Notepad]", "", 10)
    ; Wait for 2 seconds.
    Sleep(2000)
    ; Close the Notepad process using the PID returned by Run.
    ProcessClose($iPID)
EndFunc   ;==>Example

----------------------------------------

 

该函数可以通过命令调用 exect

参见:

RunWait, RunAs, RunAsWait, ShellExecute, ShellExecuteWait, ProcessClose

例子
copy

exect=$var_aa=Run('Explorer.exe~~/select,'&@ProgramFilesDir&'\Internet~~Explorer') GLOBALEXECT<a> ;;启动程序的例子

 

exect=Run('notepad.exe')||WinWait('[CLASS:Notepad]')||Sleep(3000)||WinClose('[CLASS:Notepad]') ;; 运行"记事本",等待指定的窗口出现,3秒钟后关闭窗口

 

exect=Run('notepad.exe')||$var_h=WinWaitActive('[CLASS:Notepad]')||ControlSend(Eval('var_h'),'''','Edit1','Hello') ;; 运行"记事本",等待激活并输入"hello"

 

exect=Run('notepad.exe')||$var_h=WinWaitActive('[CLASS:Notepad]')||ControlSend(Eval('var_h'),'''','Edit1','закройте~~окно')||WinWaitClose(Eval('var_h'))||MsgBox(4096,'''','окно~~закрыто') ;; 运行"记事本",等待用户关闭窗口

 

exect=Run('notepad.exe')||$var_h=WinWaitActive('[CLASS:Notepad]')||ControlSend(Eval('var_h'),'''','Edit1','сверните~~окно')||WinWaitNotActive(Eval('var_h'))||MsgBox(4096,'''','окно~~не~~активно') ;; 运行"记事本",等到窗口不活动

 

exect=$var_ipid=Run('notepad.exe')||Sleep(3000)||ProcessClose($var_ipid) ;; 运行"记事本"和3秒完成这个过程

 

exect=$var_ipid=Run('notepad.exe')||ProcessWaitClose($var_ipid)||MsgBox(4096,'''','процесс~~завершился') ;; "记事本"开始并等待它关闭

 

exect=Run('notepad.exe')||$var_h=WinWait('[CLASS:Notepad]','''',5)||WinSetState(HWnd($var_h),'''',@SW_MINIMIZE) ;;开始"记事本",等待出现并关闭

 

exect=Run('notepad.exe')||$var_h=WinWait('[CLASS:Notepad]','''',5)||SendKeepActive(HWnd($var_h)) <FOR> 1 <TO> 10 exect=Send('Hello')||Sleep(500) <NEXT> exect=SendKeepActive('''')||WinClose(HWnd($var_h)) ;; 使用Send()函数运行记事本并保持记事本窗口处于活动状态

 

exect=Run('notepad.exe')||$var_h=WinWait('[CLASS:Notepad]','''',5)||IsHWnd(Eval('var_h'))?_ViewValues('Это~~дескриптор~~HWND'):_ViewValues('Это~~НЕ~~дескриптор~~HWND') ;; 运行记事本和检查窗口句柄的有效性

 

exect=Run(@ComSpec&'~~/k~~'&'netsh~~interface~~ip~~show~~address','''') ;; 调用控制台和传递参数(控制台保持打开状态)

 

exect=Run(@ComSpec&'~~/k~~'&ClipGet(),'''') ;;调用控制台并从剪贴板传递剪贴板(控制台保持打开状态)

up2

tcimage © Аверин Андрей для Total Commander Image Averin-And@yandex.ru