Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

HTA using vbscript

Posted on 2004-09-28
10
Medium Priority
?
1,136 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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
Vim Reference Guide

Vim is a powerful text editor favored by many sysadmins and developers - here are some commands that you'll want to keep in your back pocket!

 
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

Looking for a new Web Host?

Lunarpages' assortment of hosting products and solutions ensure a perfect fit for anyone looking to get their vision or products to market. Our award winning customer support and 30-day money back guarantee show the pride we take in being the industry's premier MSP.

Question has a verified solution.

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

This article will inform Clients about common and important expectations from the freelancers (Experts) who are looking at your Gig.
FAQ pages provide a simple way for you to supply and for customers to find answers to the most common questions about your company. Here are six reasons why your company website should have a FAQ page
The viewer will learn how to count occurrences of each item in an array.
Learn how to create flexible layouts using relative units in CSS.  New relative units added in CSS3 include vw(viewports width), vh(viewports height), vmin(minimum of viewports height and width), and vmax (maximum of viewports height and width).
Suggested Courses

721 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