执行时显示消息对话框

时间:2011-12-20 12:40:25

标签: vbscript wsh

我在vbscript中使用此代码段:

Set WSH = CreateObject("WScript.Shell")
cmd = "some command"
flag = WSH.Run(cmd, 0, true)

可以注意到,在.Run()调用中,“WaitOnReturn”设置为“true”,因为我想知道外部程序何时完成,另外还有状态

问题是外部程序需要一些时间才能完成,我想弹出“请稍候......”MsgBox,但我不能这样,因为我将“WaitOnReturn”设置为“true”,我需要因为我需要结果从该计划中进行额外处理

有没有办法在外部程序执行时以某种方式显示这个MsgBox?

2 个答案:

答案 0 :(得分:4)

很抱歉,我可以在执行之前调用MsgBox,Run() :尴尬:


编辑:

这里没有用户互动是一种解决方法(取自http://www.robvanderwoude.com/vbstech_ui_progress.php

Function ProgressMsg( strMessage, strWindowTitle )
' Written by Denis St-Pierre
    Set wshShell = WScript.CreateObject( "WScript.Shell" )
    strTEMP = wshShell.ExpandEnvironmentStrings( "%TEMP%" )
    If strMessage = "" Then
        On Error Resume Next
        objProgressMsg.Terminate( )
        On Error Goto 0
        Exit Function
    End If
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    strTempVBS = strTEMP + "\" & "Message.vbs"

    Set objTempMessage = objFSO.CreateTextFile( strTempVBS, True )
    objTempMessage.WriteLine( "MsgBox""" & strMessage & """, 4096, """ & strWindowTitle & """" )
    objTempMessage.Close

    On Error Resume Next
    objProgressMsg.Terminate( )
    On Error Goto 0

    Set objProgressMsg = WshShell.Exec( "%windir%\system32\wscript.exe " & strTempVBS )

    Set wshShell = Nothing
    Set objFSO   = Nothing
End Function

然后用:

调用它

ProgressMsg "Installing, Please wait.", "Some title"

以#终止它:

ProgressMsg "", "Some title"

答案 1 :(得分:-1)

我在另一个博客上得到了答案,基本上,我所要做的就是全局调整变量“ProgressMsg”。

由于