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.
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"> Age:
<input type="text" size="3" name="Number">
<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