Solved

HTA using vbscript

Posted on 2004-09-28
10
1,120 Views
Last Modified: 2012-06-22
I am putting together an HTA that uses vbscript for running task on Active Directory.  I have one task that creates a new user, assignes all standard properties for our domain, and creates the new users home directory folder.  I want to put a status message on the page that will show what the task is currently doing.  I found a vbscript file that creates an Internet explorer window and displays defined messages as the process runs but this only works from a command prompt.  After decifering the script I see that it is using the wscript.sleep * command to designate the process to pause for * milliseconds, this give the interface a chance to refresh and display the message.  Is there any way to access this from inside the vbscript in a hta application?  If no is there anything else that can be used to give the same effect?
0
Comment
Question by:dan_neal
  • 5
  • 3
10 Comments
 
LVL 13

Expert Comment

by:davidlars99
ID: 12172235
hmm... Interestning thing you doing there, If I knew what that VBScript file has inside I might be able to help you out

briefly what I would do is: I'd use
dim win
win=window.open("page.html","options")

and then you can manipulate any object/layer in that "page.html" file by calling
win.document.getElementbyId("obID").innerText=currentTask  
wscript.sleep would be nice to use, but I don't think it would be necessary
0
 
LVL 9

Author Comment

by:dan_neal
ID: 12172294
so what you are saying is to use a separate html file to display my status information instead of using the hta form?
0
 
LVL 9

Author Comment

by:dan_neal
ID: 12172462
Here is the file that displays the status box and uses the wscript.sleep function:

dim oIE, oS, k, strIETitle, blnFlag
strIETitle = "Test Program" & string(40,"-")
blnFlag = True

set oS = createobject("wscript.shell")

InitIE "Program Initializing"

Wscript.sleep 2000
for k = 0 to 10
      MsgIE "Iteration " & k & vbcrlf & "To abort, close this box"
      Wscript.sleep 1000
      if blnFlag = false then
            wscript.echo "Program Aborted after " & k & " iterations"
            wscript.quit
      end if
next
MsgIE "Loop Complete"

wscript.sleep 2000
MsgIE "Program Finished"

If blnFlag = false then
      wscript.echo "Program Aborted after iterations complete"
      wscript.quit
end if

wscript.sleep 2000
MsgIE "IE_Quit"

Set oIE = nothing
set oS = nothing
wscript.echo "done"

Sub MsgIE(strMsg)
on error resume next
if strMsg = "IE_Quit" then
      blnFlag = false
      oIE.Quit
else
      oIE.Document.Body.InnerText = strMsg
      if err.Number <> 0 then
            err.clear
            blnFlag = false
            exit sub
      end if
      oS.AppActivate strIETitle
end if
end sub

sub InitIE(strMsg)
      dim intWidth, intHeight, intWidthW, intHeightW
      set oIE = createobject("InternetExplorer.Application")
      With oIE
            .toolbar = false
            .statusbar = false
            .resizable = false
            .navigate("about:blank")
            do until .readystate = 4
                  wscript.sleep 100
            loop
            with .document
                  with .parentWindow
                        intWidth = .screen.AvailWidth
                        intHeight = .screen.availheight
                        intWidthW = .screen.availwidth * .40
                        intHeightW = .screen.availheight * .05
                        .resizeto intwidthW, intheightW
                        .moveto (intWidth - intwidthw)/2, (intHeight - intHeightW)/2
                  end with
                  .write "<body> " & strMsg & " </body></html>"
                  with .parentwindow.document.body
                        .style.backgroundcolor = "LightBlue"
                        .scroll = "no"
                        .style.font = "10pt 'Tahoma'"
                        .style.borderStyle = "outset"
                        .style.borderWidth = "4px"
                  end with
                  .Title = strIETitle
                  oIE.visible = true
                  wscript.sleep 100
                  oS.AppActivate strIETitle
            end with
      end with
end sub

This file works great as a stand-alone script but not to incorrporate into an hta.
0
Resolve Critical IT Incidents Fast

If your data, services or processes become compromised, your organization can suffer damage in just minutes and how fast you communicate during a major IT incident is everything. Learn how to immediately identify incidents & best practices to resolve them quickly and effectively.

 
LVL 9

Author Comment

by:dan_neal
ID: 12173696
Have solved problem myself.  Thank you for your response.
0
 
LVL 13

Expert Comment

by:davidlars99
ID: 12174024
if not a secret what solution did you come up with?
0
 
LVL 13

Expert Comment

by:davidlars99
ID: 12176386
dan_neal, I asked you before and maybe you didn't see it, so if not a secret what solution did you come up with?
0
 
LVL 9

Author Comment

by:dan_neal
ID: 12178738
created a sub routine that runs the ping command for a selected amount of time.  Here is the sub:

Sub ccSleep(seconds)
     set oShell = CreateObject("Wscript.Shell")
     cmd = "%COMSPEC% /c ping -n " & 1 + seconds & " 127.0.0.1>nul"
     oShell.Run cmd,0,1
End Sub

Just place a call to this sub at any point you want to pause a routine to do something else such as in my case I wanted a status message to be updated as the routine ran to give the user an idea of where the process is at any given time.  Here is how I called the routine:

Results.style.display = "block"
btnResultsReturn.disabled = true
lblStatus.innertext = "Validating data..."
ccSleep 1
if not e then
      lblerr.style.display = "block"
      lblstatus.innertext = "Errors found"
      ccsleep 1
      fname.focus
      dresults.style.display = "none"
      exit sub
else
      lblerr.style.display = "none"
      ccsleep 1
end if
lblstatus.innertext = "Validation complete"
ccSleep 1
lblstatus.innertext = "Generating account name..."
ccsleep 1
acname = left(fname.value,1) & lname.value
l = 1
do until chkuser(acname)
      if l = 1 then
            acname = left(fname.value,1) & mi.value & lname.value
      else
            acname = left(fname.value,1) & lname.value
      end if
      l = l + 1
loop
lblUsername.innertext = acname
lblstatus.innertext = "Available name generated..."
ccsleep 1

each ccsleep 1 runs the sub ccsleep for 1 second.
0
 
LVL 9

Author Comment

by:dan_neal
ID: 12178743
do so makes sure the form is given a chance to update the status message.
0
 

Accepted Solution

by:
ee_ai_construct earned 0 total points
ID: 12209051
Question answered by asker or dialog valuable.
Closed, 225 points refunded.
ee_ai_construct (replacement part #xm34)
Community Support Admin
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Password hashing is better than message digests or encryption, and you should be using it instead of message digests or encryption.  Find out why and how in this article, which supplements the original article on PHP Client Registration, Login, Logo…
Although a lot of people devote their energy toward marketing for specific industries, there are some basic principles that can be applied to any sector imaginable. We’ll look at four steps to take and examine how those steps were put into action fo…
This video teaches users how to migrate an existing Wordpress website to a new domain.
The viewer will learn how to create and use a small PHP class to apply a watermark to an image. This video shows the viewer the setup for the PHP watermark as well as important coding language. Continue to Part 2 to learn the core code used in creat…

679 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question