theta
theta

Reputation: 25631

Show Message dialog while executing

I use this snippet in vbscript:

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

As it can be noticed, in .Run() call, "WaitOnReturn" is set to "true" as I want to know when external program finishes and additionally it status

Problem is that external program needs some time to finish and I want to pop "Please wait..." MsgBox but I can't this way as I set "WaitOnReturn" on "true" which I need as I need result from that program for additional processing

Is there a way I can show somehow this MsgBox while external program is executed?

Upvotes: 4

Views: 26402

Answers (2)

Ken Williams
Ken Williams

Reputation: 29

I was given an answer on another blog, basically, all I had to do was dim the variable "ProgressMsg" globally.

Thanks

Upvotes: 0

theta
theta

Reputation: 25631

Sorry, it slipped to me that i can call MsgBox just before executing, Run() :embarrassed:


Edit:

for no user interaction here is one workaround (taken from 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

Then call it with:

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

end terminate it with:

ProgressMsg "", "Some title"

Upvotes: 4

Related Questions