Solved

HTA using vbscript

Posted on 2004-09-28
10
1,123 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
Why Off-Site Backups Are The Only Way To Go

You are probably backing up your data—but how and where? Ransomware is on the rise and there are variants that specifically target backups. Read on to discover why off-site is the way to go.

 
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

Secure Your WordPress Site: 5 Essential Approaches

WordPress is the web's most popular CMS, but its dominance also makes it a target for attackers. Our eBook will show you how to:

Prevent costly exploits of core and plugin vulnerabilities
Repel automated attacks
Lock down your dashboard, secure your code, and protect your users

Question has a verified solution.

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

There’s a good reason for why it’s called a homepage – it closely resembles that of a physical house and the only real difference is that it’s online. Your website’s homepage is where people come to visit you. It’s the family room of your website wh…
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…
Viewers will get an overview of the benefits and risks of using Bitcoin to accept payments. What Bitcoin is: Legality: Risks: Benefits: Which businesses are best suited?: Other things you should know: How to get started:
This tutorial walks through the best practices in adding a local business to Google Maps including how to properly search for duplicates, marker placement, and inputing business details. Login to your Google Account, then search for "Google Mapmaker…

710 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