执行 AutoIt 并等待完成

Posted

技术标签:

【中文标题】执行 AutoIt 并等待完成【英文标题】:Execute AutoIt and wait for finish 【发布时间】:2016-02-21 21:06:13 【问题描述】:

我需要实现一个宏,它在 autoit 之后运行并完成运行程序,它运行宏的其余部分。 我尝试了 Shellandwait(),但没有找到解释它的文档。

我拿了论坛的其他代码示例并得到了这个:

子 autoit() 暗淡进程只要 将 xPath 调暗为字符串 将 wsh 变暗为对象 将 waitOnReturn 调暗为布尔值:waitOnReturn = True 将 windowStyle 调暗为整数:windowStyle = 1 设置 wsh = CreateObject("WScript.Shell") xPath = Application.ActiveWorkbook.Path hProcess = wsh.Run("D:\Program Files\autoit-v3\install\AutoIt3_x64.exe " _ & xPath & "\leandro.au3", 0, True) Workbooks.Open (xPath & "\Mudança " & Format(Date, "dd_mm_yyyy") & ".csv") 结束子

当我运行它时,它会返回这个错误:

“运行时错误'-2147024894 (80070002)':对象'IWshShell3'的方法'Run'失败”

我不知道这意味着什么,我不知道解决方案。

【问题讨论】:

【参考方案1】:

如果xPath 中有空格,则需要将表达式用引号括起来。

试试这样的方法:

xPath = ActiveWorkbook.Path

With CreateObject("WSCript.Shell")
    .Exec "CMD /C START /WAIT ""D:\Program Files\autoit-v3\install\AutoIt3_x64.exe"" """ & xPath & "\leandro.au3"""
End With

【讨论】:

【参考方案2】:

让我分享两个 VBA 代码示例,用于从 AutoIt 脚本捕获输出流(从 STDOUT 流中读取)

VBA 代码:

Dim sFilePath As String
Dim objShell As Object, objCmdExec
sFilePath = String(1, 34) & Application.ActiveWorkbook.path & Application.PathSeparator & "test0.au3" & String(1, 34)

Set objShell = CreateObject("WScript.Shell")
Set objCmdExec = objShell.exec("""C:\Program Files (x86)\AutoIt3\AutoIt3.exe"" " & sFilePath)

MsgBox (objCmdExec.StdOut.ReadAll)

这是第一个测试 (test0.au3) 的 AutoIt 脚本:

Global $iPID = Run("notepad.exe", "", @SW_SHOWMAXIMIZED)
WinWait("[CLASS:Notepad]", "", 10)
Sleep(2000)
Send("Hello")
Sleep(1000)
ProcessClose($iPID)
ConsoleWrite("Done" & @CRLF)

我发现另一个有用的选项是这个 vba 类:

VBA Run Application - Capture Output。作者:dmaruca。最后更新于 2012 年

这里是一个例子:

Dim sFilePath As String
sFilePath = ThisWorkbook.path & Application.PathSeparator & "test.au3"

Dim RunApp As New CRunApp
RunApp.Command = "C:\Program Files (x86)\AutoIt3\AutoIt3.exe"
RunApp.AddParamater sFilePath
RunApp.AddParamater "Buenos días"
MsgBox RunApp.RunAppWait_CaptureOutput()

以及用于测试的脚本(test.au3):

MsgBox(4096, 'AutoIt MsgBox', $CmdLine[1])
ConsoleWrite($CmdLine[1] & @CRLF & "From: " & @ScriptName)

【讨论】:

以上是关于执行 AutoIt 并等待完成的主要内容,如果未能解决你的问题,请参考以下文章

Perl 脚本不等待 .bat 文件完成并继续执行

从 Java 执行命令并等待命令完成

执行脚本sh install.sh后:需要输入1等待5秒并回车,等待10秒输入y并回车 ,如何用脚本完成这两个操作。

如何将任务委托给主线程并等待其执行完成?

Jenkins - 让代理等待其他代理完成

并行运行 PL/SQL 调用并等待执行完成(fork 和 join)