aceklub97
asked on
VBScript - How Do I integrate Progress Bar into Script
Greetsings Experts,
I have a script that I was able to get a simple progress bar function to run on it. It works fine with no errors, but the only way that I can get it to work is to put it as the very first thing in the code. It runs before the script start and then closes...the Script runs after that.
What I need help with is somehow modifying the progress bar code so that it actually runs at the same time while the script is running. I have created an .hta file for the Gui that has a progress bar embedded into the frame. Is it possible to:
1. Can I get the progress bar script to run while the script is running
2. Is there a method where I can call the progress bar to in the exactly spot that I have build into the .hta file. I have included samples of code below.
I have a script that I was able to get a simple progress bar function to run on it. It works fine with no errors, but the only way that I can get it to work is to put it as the very first thing in the code. It runs before the script start and then closes...the Script runs after that.
What I need help with is somehow modifying the progress bar code so that it actually runs at the same time while the script is running. I have created an .hta file for the Gui that has a progress bar embedded into the frame. Is it possible to:
1. Can I get the progress bar script to run while the script is running
2. Is there a method where I can call the progress bar to in the exactly spot that I have build into the .hta file. I have included samples of code below.
1. This is the code that I get to run the progress bar:
'**********************************************************************************************
On Error Resume Next
Dim bar, i
Set bar = new IEProgBar
With bar
.Move -1, -1, 500, -1
.Units = 100
.Show
For i = 0 to 100
WScript.Sleep 500
.Advance
Next
End With
Set bar = Nothing
'-------- Start Progress bar Class ----------------------------------
Class IEProgBar
Private FSO, IE, BCol, TCol, ProgCol, ProgNum, ProgCaption, Pic, Q2, sTemp, iProg, ProgTitle
Private Sub Class_Initialize()
On Error Resume Next
Set FSO = CreateObject("Scripting.FileSystemObject")
sTemp = FSO.GetSpecialFolder(2)
Set IE = CreateObject("InternetExplorer.Application")
With IE
.AddressBar = False
.menubar = False
.ToolBar = False
.StatusBar = False
.width = 400
.height = 120
.resizable = True
End With
BCol = "E0E0E4" '--background color.
TCol = "000000" '--caption text color.
ProgCol = "0000A0" '--progress color.
ProgNum = 19 'number of progress units.
ProgCaption = "Progress. . ."
ProgTitle = "Progress"
Q2 = chr(34)
iProg = 0 '--to track progress.
End Sub
Private Sub Class_Terminate()
On Error Resume Next
IE.Quit
Set IE = Nothing
Set FSO = Nothing
End Sub
Public Sub Show()
Dim s, i, TS
On Error Resume Next
s = "<HTML><HEAD><TITLE>" & ProgTitle & "</TITLE></HEAD>"
s = s & "<BODY SCROLL=" & Q2 & "NO" & Q2 & " BGCOLOR=" & Q2 _
& "#" & BCol & Q2 & " TEXT=" & Q2 & "#" & TCol & Q2 & ">"
If (Pic <> "") Then
s = s & "<IMG SRC=" & Q2 & Pic & Q2 & " ALIGN=" & Q2 & "Left" & Q2 & ">"
End If
If (ProgCaption <> "") Then
s = s & "<FONT FACE=" & Q2 & "arial" & Q2 & " SIZE=2>" _
& ProgCaption & "</FONT><BR><BR>"
Else
s = s & "<BR>"
End If
s = s & "<TABLE BORDER=1><TR><TD><TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0><TR>"
For i = 1 to ProgNum
s = s & "<TD WIDTH=16 HEIGHT=16 ID=" & Q2 & "P" & Q2 & ">"
Next
s = s & "</TR></TABLE></TD></TR></TABLE><BR><BR></BODY></HTML>"
Set TS = FSO.CreateTextFile(sTemp & "\iebar1.html", True)
TS.Write s
TS.Close
Set TS = Nothing
IE.Navigate "file:///" & sTemp & "\iebar1.html"
IE.visible = True
End Sub
'-- Advance method colors one progress unit.
' iProg variable tracks how many
'-- units have been colored.
' Each progress unit is a <TD> with ID="P". They can be
'-- accessed in sequence through Document.All.Item.
Public Sub Advance()
On Error Resume Next
If (iProg < ProgNum) and (IE.Visible = True) Then
IE.Document.All.Item("P", (iProg)).bgcolor = Q2 & "#" _
& ProgCol & Q2
iProg = iProg + 1
End If
End Sub
'--resize and/or position window. Use -1 For any value Not being Set.
Public Sub Move(PixLeft, PixTop, PixWidth, PixHeight)
On Error Resume Next
If (PixLeft > -1) Then IE.Left = PixLeft
If (PixTop > -1) Then IE.Top = PixTop
If (PixWidth > 0) Then IE.Width = PixWidth
If (PixHeight > 0) Then IE.Height = PixHeight
End Sub
'--remove Registry settings that display advertising in the IE title bar.
'-- This change won't show up the first time it's used because the IE
'-- instance has already been created when the method is called.
Public Sub CleanIETitle()
Dim sR1, sR2, SH
On Error Resume Next
sR1 = "HKLM\Software\Microsoft\Internet Explorer\Main\Window Title"
sR2 = "HKCU\Software\Microsoft\Internet Explorer\Main\Window Title"
Set SH = CreateObject("WScript.Shell")
SH.RegWrite sR1, "", "REG_SZ"
SH.RegWrite sR2, "", "REG_SZ"
Set SH = Nothing
End Sub
'------------- Set background color: ---------------------
Public Property Let BackColor(sCol)
If (TestColor(sCol) = True) Then BCol = sCol
End Property
'------------- Set caption color: ---------------------
Public Property Let TextColor(sCol)
If (TestColor(sCol) = True) Then TCol = sCol
End Property
'------------- Set progress color: ---------------------
Public Property Let ProgressColor(sCol)
If (TestColor(sCol) = True) Then ProgCol = sCol
End Property
'------------- Set icon: ---------------------
Public Property Let Icon(sPath)
If (FSO.FileExists(sPath) = True) Then Pic = sPath
End Property
'------------- Set title text: ---------------------
Public Property Let Title(sCap)
ProgTitle = sCap
End Property
'------------- Set caption text: ---------------------
Public Property Let Caption(sCap)
ProgCaption = sCap
End Property
'------------- Set number of progress units: ---------------------
Public Property Let Units(iNum)
ProgNum = iNum
End Property
'--confirm that color variables are valid 6-character hex color codes:
'-- If Not 6 characters Then TestColor = False
'-- If any character is Not 0-9 or A-F Then TestColor = False
Private Function TestColor(Col6)
Dim iB, sB, iB2, Boo1
On Error Resume Next
TestColor = False
If (Len(Col6) <> 6) Then Exit Function
For iB = 1 to 6
sB = Mid(Col6, iB, 1)
iB2 = Asc(UCase(sB))
If ((iB2 > 47) and (iB2 < 58)) or ((iB2 > 64) and (iB2 < 71)) Then
Boo1 = True
Else
Boo1 = False
Exit For
End If
Next
If (Boo1 = True) Then TestColor = True
End Function
End class
'**********************************************************************************************
2. This the section of my main code that I am trying to synch up with the Progress BarCode. I want to get the progress bar to run during the functions that are call in either side of the IFThenElse statement:
'********************************************************************************************
If backupOrRestoreResponse = 0 Then
executeBackup
executePermissions
ElseIf backupOrRestoreResponse = 1 Then
executeRestore
deleteBackup
Else
MsgBox "You did not enter a valid number."
End If
Else
MsgBox "You did not enter a valid number."
End If
Else
MsgBox "You did not enter a valid number."
End If
'******************************************************************************************************
3. This Is the HTML code on my .hta shell that creates a space for a progress bar. I am trying to figure out to get the bar to pop up at these same dimensions and run in that space:
<DIV>
...
<HTML>
...
<SCRIPT>
...
</SCRIPT>
</HEAD>
<BODY bgcolor="white">
<H3>Data Migration Status:</H3>
<DIV id=lblStatus class=clsIndent>Ready to begin</DIV>
<H3><span style="text-decoration:underline">Click the Start Button</span> to begin the process. <br><span style="text-decoration:underline">Click the Close Button</span> when the process has finished:</H3><br>
<DIV id=lblMore class=clsIndent></DIV><br>
<DIV>
<INPUT type=button id=cmdStart value="Start">
<INPUT type=button id=cmdReset value=Reset disabled>
<button accesskey=C id=buttonClose onclick=ButtonCloseClick><U>C</U>lose</button><br><br><br>
<p>
<object classid="clsid:35053A22-8589-11D1-B16A-00C0F0283628" id="ProgressBar1" height="20" width="400">
<param name="Min" value="0">
<param name="Max" value="100">
<param name="Orientation" value="0">
<param name="Scrolling" value="1">
</object>
</p><br><br>
</DIV>
</BODY>
</HTML>
Can you please post the entire HTA. I cannot proceed without seeing the functions being referenced in area #2.
ASKER
Here is the .HTA that you requested. Please let me know if you need any other information.
<HTML>
<HEAD>
<TITLE>
Nationwide Sales Solutions - Training Room Data Migration Tool
</TITLE>
<link href="\\10.120.28.74\scripts\Backup\nwlogo.ico" type="text/css" rel="stylesheet">
<HTA:application scroll=yes>
<STYLE>
div.clsIndent {margin-left: 30px}
div.clsIndentRed {margin-left: 30px; color: red}
</STYLE>
<SCRIPT language=VBScript>
Option Explicit
Const WshRunning = 0
Const WshFinished = 1
Dim wshShell
Dim wseExternal
Dim tmrExternal
Dim strComputer
Dim objWMIService
Dim colItems
Dim intHorizontal
Dim intVertical
Dim objExplorer
Dim colServices
Dim intServices
Dim intIncrement
Sub cmdStart_onclick()
On Error Resume Next
Set wseExternal = _
wshShell.Exec("wscript.exe //NOLOGO \\10.120.28.74\scripts\Backup\nss_Backuptest.vbs")
If Err.number <> 0 Then
lblStatus.innerText = "Failed to start!"
Else
lblStatus.innerText = "Your Backup/Restore is in progress. Please wait ... This process could take several minutes to complete." _
cmdStart.disabled = True
cmdReset.disabled = true
tmrExternal = _
window.setInterval("tmrExternal_timer", _
1000, _
"VBScript")
End if
End sub
'sub cmdStart_Progress()
'End sub
Sub cmdReset_onclick()
lblStatus.innerText = "Click the Start Button to begin the process:"
lblResults.innerHTML = " "
lblMore.innerHTML = ""
cmdReset.disabled = true
cmdStart.disabled = False
End Sub
'Button Close
Sub ButtonCloseClick()
If msgbox ("Are you sure you want to Close?",4,"Close Backup?") = vbYes then
window.Close
End if
End Sub
Sub Continue()
lblMore.innerHTML = _
"The Data Migration process has completed.<br>" _
& vbCrLf & "If you have just backed up your PC, please go to your new PC and run this process again, selecting '1' for restore.<P>" _
& vbCrLf & "If you have just restored you data to the new PC, then your work is done. Please double check to make sure everything was successfully transfered.<br>" _
& vbCrLf & "If you have any computer related issues, please call the IT Service Desk at 515-508-8515." _
& VbCrLf & VbCrLf
cmdReset.disabled = true
End Sub
Sub tmrExternal_timer()
With lblStatus
If wseExternal.Status = WshRunning Then
If .className = "clsIndentRed" Then
.className = "clsIndent"
Else
.className = "clsIndentRed"
End If
Else
window.clearInterval tmrExternal
.innerText = _
"Finished. Exit code " _
& CStr(wseExternal.ExitCode)
.className = "clsIndent"
Set wseExternal = Nothing
window.setTimeout "Continue", 200, "VBScript"
End If
End With
End Sub
Sub window_onload()
Set wshShell = CreateObject("WScript.Shell")
End Sub
Sub window_onunload()
Set wshShell = Nothing
End Sub
</SCRIPT>
</HEAD>
<BODY bgcolor="white">
<img src="\\10.120.28.74\scripts\Backup\image002.gif" alt="Go"><br><br><br><br><br><br>
<H3>Data Migration Status:</H3>
<DIV id=lblStatus class=clsIndent>Ready to begin</DIV>
<H3><span style="text-decoration:underline">Click the Start Button</span> to begin the process. <br><span style="text-decoration:underline">Click the Close Button</span> when the process has finished:</H3><br>
<DIV id=lblMore class=clsIndent></DIV><br>
<DIV>
<INPUT type=button id=cmdStart value="Start">
<INPUT type=button id=cmdReset value=Reset disabled>
<button accesskey=C id=buttonClose onclick=ButtonCloseClick><U>C</U>lose</button><br><br><br>
<img src="\\10.120.28.74\scripts\Backup\image001.gif" alt="Go"><br><br><br><br>
<p>
<object classid="clsid:35053A22-8589-11D1-B16A-00C0F0283628" id="ProgressBar1" height="20" width="400">
<param name="Min" value="0">
<param name="Max" value="100">
<param name="Orientation" value="0">
<param name="Scrolling" value="1">
</object>
</p><br><br>
</DIV>
</BODY>
</HTML>
ASKER CERTIFIED SOLUTION
membership
Create a free account to see this answer
Signing up is free and takes 30 seconds. No credit card required.
Oh, P.S. that sample was based on this code:
http://www.microsoft.com/technet/scriptcenter/topics/activex/progressbar.mspx
Regards,
Rob.
http://www.microsoft.com/technet/scriptcenter/topics/activex/progressbar.mspx
Regards,
Rob.
ASKER
Thanks again Rob. I get the concept. I just need to play with it to get it right.
OK, thanks for the grade. Good luck with it...
Regards,
Rob.
Regards,
Rob.