Inside Microsoft Windows Script Host

Dieses Buch bietet Ihnen eine fundierte Einführung in die Technologie des Windows Script Host.

Günter Born: Inside Microsoft Windows Script Host, 3. Auflage,
Microsoft Press, Unterschleißheim, 2002, ISBN 3-86063-673-1, 857 Seiten, 1 CD, Euro 44,90

Nutzen Sie die volle Leistungsfähigkeit der Registrierung: Insider-Kniffe, Troubleshooting, Softwareinstallation.

Microsoft Windows Script Host (WSH) ist die Programmierumgebung, mit der sich Programme in VBScript und JScript direkt unter Windows 98 (sowie Windows 95 und Windows NT 4.0) ausführen lassen. Ab Windows 2000 und Windows Millenium ist WSH 2.0 bereits im Lieferumfang enthalten. Windows XP bietet die Version 5.6 des WSH. Sie benötigen nur das Wissen um die Sprache VBScript (ähnlich wie Visual Basic) und/oder JScript (ähnlich wie JavaScript), einen Editor zum Schreiben der Skriptdateien sowie das notwendige Know How zum Verfassen der Programme. Bisher scheiterte der breite Einsatz von Skriptdateien an der fehlenden Dokumentation.

Dies wird sich nun ändern. Das Buch bietet eine detaillierte Behandlung der Thematik, von den ersten Schritten mit Einführung in den WSH, in Entwicklungsumgebungen, in VBScript und JScript über eine Erläuterung der Objektmodelle des WSH bis hin zu ausgefeilten Programmiertechniken wie ActiveX-Entwicklung oder Zugriffe auf Windows APIs. Dieses Buch wird Ihr Windows-Scripting Host-Wissen nachhaltig verändern. Klar verständlich, direkt und ohne Ballast deckt der Autor auf, wie Sie den WSH für Automatisierungsaufgaben richtig nutzen, auf undokumentierte Funktionen zurückgreifen und dem Betriebssystem die "Sporen" geben. Unentbehrlich für jeden ernsthaften Windows Anwender.

Diese Themen finden Sie in diesem Buch:

Und das ist auf der Begleit-CD:

Hier noch etwas Material im Adobe Acrobat PDF-Format als ZIP-Archiv:

Inhaltsverzeichnis  (2. Auflage 54 KB)
Leseprobe  (ausgesuchte Kapitel der 1.Auflage, 2.6 MB)

Die englische Fassung ist bei MS Press USA erhältlich. Weitere Sprachen sind in Vorbereitung.Weitere Informationen zum Thema WSH finden Sie im WSH Bazaar.

Errata (3. Auflage)

Hier finden Sie ggf. Hinweise auf Fehler, die nach Drucklegung im Buch gefunden wurden.

Seite
Korrekturhinweis
36 Im Hinweiskasten muss die Datei ScriptIDE.hta heißen.
37 4. Zeile, Rechtschreibfehler "... getrennte Versionen für Windows 9x..."
738 Listing, Zeile 33, aus
"winmgmts:{impersonationLeve=impersonate,(Audit))" & _
wird
"winmgmts:{impersonationLeve=impersonate,(Security, Audit))" & _
796 erste Listingzeile, das Blank in Shell.TrayProperties ist zuviel.

Generelles: Verschiedene Sicherheitspatches im IE bzw. in Windows verhindern, dass verschiedene Script-Lösungen, die den Internet Explorer und Formulare verwenden, funktionieren.

Einige Beispielskripte versuchen den IE als Instanz mit einem leeren HTML-Dokument ("about:blank") aufzurufen und dann HTML-Code "on-the-fly" in das Dokumentfenster zu schreiben. Das Skript wird dann mit dem Fehler, dass das betreffende Objekt nicht verfügbar ist, bei IE-Versionen mit Sicherheitsupdates, abbrechen. Verhindern lässt sich dieser Fehler, indem Sie eine leere HTML-Dokumentdatei lokal auf der Festplatte hinterlegen und diese dann im WSH-Skript laden. Bei einer lokal geladenen HTML-Dokumentdatei erlaubt der Internet Explorer den Zugriff auf das document object.

Das Script Dialog.vbs aus Kapitel 9 wird daher sofort nach dem Start mit einem Fehlerdialog enden, dass der Zugriff verboten ist. Ersetzen Sie den Aufruf

oIE.navigate "about:blank" 

durch

oIE.navigate path & "Leer.htm"

Die leere HTML-Datei Leer.htm muss im Pfad der Skriptdatei vorliegen. Damit das Ganze funktioniert, muss zudem dass leere HTML-Dokument sichtbar sein. Nachfolgendes Listing zeigt den geänderten Skriptcode.

'************************************************
' File:   Dialog.vbs (WSH Beispiel in VBScript)
' Autor:  (c) G. Born  
'
' Das Skript verwendet den Internet Explorer (ab 6.0)
' zur Anzeige eines modalen Dialogs mit einem HTML-
' Dokument.
'************************************************
Option Explicit

Dim oIE
Dim path
Dim Title

' *** Hole Pfad zur HTML-Datei (diese muss im Skriptordner liegen)
 path = WScript.ScriptFullName
 path = Left(path, InstrRev(path, "\"))

' *** Internet Explorer starten ***
 Set oIE = WScript.CreateObject("InternetExplorer.Application")
 oIE.navigate path & "Leer.htm" ' Leere Seite
' Fenster unsichtbar (Standardeinstellung)
 oIE.visible = true ' muss sichtbar sein, sonst klappt es bei IE 6 nicht
 oIE.height = 1     ' daher auf kleine Fenstergröße reduzieren
 oIE.width = 1

  Do While (oIE.Busy)      ' Warte, bis IE fertig
   WScript.Sleep 100
  Loop

' Zeige Dialog 
 oIE.document.script.showModalDialog path & "Test1.htm", , _
              "dialogHeight: 15" 
 WScript.Echo "Fertig"
 oIE.Quit
' Ende

Bei den HTML-Formularen aus Kapitel 9 gibt es bei allen Buchausgaben das Problem, dass die Beispiele nicht mehr funktionieren , sobald der IE 6 und das Service Pack 2 unter Windows XP installiert wurde. Sicherheitseinstellungen verhindern, dass der IE die Formulare samt den Skripten laden kann. Die Skripte werden blockiert und der IE zeigt in der Informationsleiste den Benutzerhinweis, dass aktive Inhalte blockiert wurden. Der Benutzer kann zwar dann die aktiven Inhalte freigeben, aber das WSH Skript hat längst das Handtuch geworfen, da die Proceduren in der HTML-Datei nicht erreichbar sind. Ich habe aber eine Lösung gefunden, bei der HTML-Formulare ohne Skripte nutzbar sind. Alle Scriptanweisungen finden sich dann im WSH Script. Hier der HTML-Code für das Formularbeispiel 1 (Form1.htm).

<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=iso-8859-1">
<title>Form input - by Günter Born</title>
</head>
<body bgcolor="#C0C0C0" scroll="no">
<h3>Form</h3>
<hr>
<form name="ValidForm">
    <p>Name: <input type="text" size="5" name="Text1">&nbsp; Age:
    <input type="text" size="3" name="Number">&nbsp; 
    <input type="button" name="Button1" value="OK"></p>
</form>
</body>
</html>

Der HTML-Code erzeugt ein einfaches Formular mit zwei Textfeldern zur Benutzereingabe sowie einer OK-Schaltfläche zum Schließen des Formulars. Die Textfelder wurden über das name-Attribut mit Objektnamen belegt. Gegenüber dem Buchbeispiel ist aber der Skriptteil der Formulardatei ersatzlos entfallen. Daher muss im WSH-Skript ein Weg gefunden werden, auf das Anklicken der OK-Schaltfläche durch den Benutzer zu reagieren. Dies lässt sich realisieren, indem im WSH Script eine Ereignisprozedur implementiert und diese dann zur Laufzeit mit dem Click-Ereignis der OK-Schaltfläche des IE-Formulars verbunden wird. Nachfolgendes Listing zeigt, wie so etwas in einem WSH Script gehen könnte.

'************************************************
' File:    Form1a.vbs (WSH-Beispiel in VBScript)
' Autor:   (c) G. Born  
'
' Das Skript demonstriert, wie sich der Internet 
' Explorer zur Formulareingabe nutzen lässt. Klappt
' auch mit dem IE 6.0 und WIn XP SP2.
'************************************************
Option Explicit

Dim oIE      ' Variablen setzen
Dim path
Dim Title
Dim Text2
Dim result1, result2
Dim oBut
Dim ready

Title = "WSH-Beispiel Formulareingabe - by G. Born"
Text2 = "Ihre Eingabe war:" & vbCRLF

' *** Ermittle den Pfad zum Skript, da die Formulardatei
' *** (HTML) im gleichen Ordner liegen muss!!!
path = WScript.ScriptFullName
path = Left(path, InstrRev(path, "\"))

' *** starte den Internet Explorer ***
Set oIE = WScript.CreateObject("InternetExplorer.Application")
  oIE.left=50             ' Fensterposition 
  oIE.top = 100           ' und andere Eigenschaften
  oIE.height = 200
  oIE.width = 350
  oIE.menubar = 0         ' Kein Menü
  oIE.toolbar = 0
  oIE.statusbar = 0
'  oIE.resizable = 0      ' Verhindert Größenänderung
  oIE.navigate path & "Form1.htm"  ' Formulardokument
  oIE.visible = 1         ' sichtbar machen

' Wichtig: Warte, bis MSIE bereit ist
  Do Until oIE.ReadyState=4
   WScript.Sleep 50
  Loop 

' Jetzt den Event Handler anbinden

Set oBut = oIE.document.getElementById ("Button1")
Set oBut.onclick = GetRef ("GetFormValue")

'Warte, bis OK-Schaltfläche angeklickt wurde
ready = false
Do Until ready
  WScript.Sleep 100  ' suspendieren, um CPU-Last zu verringern
Loop

' Jetzt die Ergebnisse anzeigen
MsgBox Text2 & vbCRLF & result1 & vbCRLF & result2, _
        vbOKOnly + vbInformation, Title

oIE.Quit               ' Internet Explorer schließen
Set oIE = Nothing      ' reset Object Variable 


' ### Event handler ###
Sub GetFormValue
' Aufruf, sobald der Benutzer die OK-Schaltfläche anklickt
' Hole Werte und setze ready-Flag
 result1 = "Name: " & oIE.Document.ValidForm.Text1.Value
 result2 = "Alter: " & oIE.Document.ValidForm.Number.Value
 ready = true  ' setze ready-Flag
End Sub
' Ende

Das Skript ruft den IE mit dem HTML-Formular auf und wartet bis der Benutzer auf die OK-Schaltfläche klickt. Dann werden die Textfelder ausgelesen, das Formular geschlossen und die übernommenen Werte in einem Dialogfeld angezeigt. Sie können die restlichen Buchbeispiele für HTML-Formulare nach diesem Prinzip umstellen, damit diese wieder im IE mit Sicherheitspatches funktionieren.

Zip-Archiv mit den beiden korrigierten Beispielen: FormSP2.zip


zurück by Benjamin Born