Solved

HTA using vbscript

Posted on 2004-09-28
10
1,106 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
 
LVL 9

Author Comment

by:dan_neal
ID: 12173696
Have solved problem myself.  Thank you for your response.
0
DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

 
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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

Deprecated and Headed for the Dustbin By now, you have probably heard that some PHP features, while convenient, can also cause PHP security problems.  This article discusses one of those, called register_globals.  It is a thing you do not want.  …
Accessibility and Usability are two concepts that seem to be closely related.  But, too many people seem to have a distorted perception of them. During last five years, those two words have come to the day-to-day work of almost every web develope…
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…
This video teaches users how to migrate an existing Wordpress website to a new domain.

930 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

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now