Der Windows Script Host
Einleitung
Oft übersehen stellt Windows in aktuellen Versionen optional die ActiveX-Komponente Windows Script Host (WSH) zur Verfügung, die Systemoperationen vereinfacht und mittels derer Informationen über das System ermittelt werden können. Der WSH bietet folgende Möglichkeiten:
- Namen von Spezialordnern ermitteln
- Umgebungsvariablen lesen und setzen
- Netzwerkinformationen ermitteln
- Meldungsfelder anzeigen
- Anwendungen starten (optional mit Starten-und-warten)
- Schlüssel und Werte in der Systemregistrierung lesen und schreiben
- Dateiverknüpfungen erstellen
- Verknüpfungen mit einem URL erstellen
Ein Großteil dieser Aufgaben kann auch mit Visual-Basic-eigenen Mitteln oder über Win32-API-Aufrufe gelöst werden.
Einbinden der Komponente
Der WSH ist in der Datei WSHom.ocx
implementiert. Zur früh gebundenen Verwendung muß ein Verweis auf diese Komponente aufgenommen werden. Anschließend kann die Klasse direkt im Code verwendet werden.
Alternativ kann die Komponente auch spät gebunden genutzt werden. In diesem Fall muß kein Verweis auf die ActiveX-Komponente gesetzt werden. Fehlt die Komponente auf dem System, führt dies zu einem Laufzeitfehler. Der Code zur spät gebundenen Verwendung könnte folgendermaßen aussehen:
Die Deklarationen von eine Environment
- und Network
-Objekten wurden hier nicht angegeben, sie sehen analog aus.
In den folgenden Kapiteln wird davon ausgegangen, daß die Variable WshShell
einen Verweis auf eine Instanz der Klasse Wscript.Shell
enthält.
Ermitteln der Namen von Spezialordnern
Der WSH stellt eine Auflistung SpecialFolders
zur Verfügung, die alle im System bekannten Namen von Spezialordnern enthält. Mittels einer Schleife können die Namen der benannten Spezialordner ermittelt werden
Daneben ist jeder der Ordner in der Auflistung über einen bestimmten Schlüssel vom Typ String
ansprechbar. Diese Konstanten sind vordefiniert, "Fonts"
würde zum Beispiel den Schriftartenordner bezeichnen und "Desktop"
den Ordner, in dem sich der Desktop befindet. Um den Pfad des Desktops abzufragen, könnte man den Code WshShell.SpecialFolders("Desktop")
verwenden. Dabei ist zu beachten, daß es sich beim im String
-Parameter übergebenen Argument um einen Wert handeln muß. Wird stattdessen eine Variable übergeben, werden falsche Werte ermittelt. Der Wert einer Variablen kann durch Umschließen des Variablennamens mit runden Klammern im Aufruf ermittelt werden.
Lesen und Schreiben von Umgebungsvariablen
Umgebungsvariablen sind systemweit verfügbare Variablen, die Informationen über das System enthalten. Jede dieser Variablen ist über eine bestimmte Zeichenfolge ansprechbar. Diese Variablen gliedern sich in die Kategorien "SYSTEM"
, "USER"
, "VOLATILE"
und "PROCESS"
. Der folgende Beispielcode würde alle Umgebungsvariablen aus dem Bereich "SYSTEM"
ausgeben:
Das Setzen und Löschen der Variablen ist wie folgt möglich:
Hier wird eine Umgebungsvariable namens "EXAMPLE"
mit dem Wert "A_VALUE"
dem Abschnitt "VOLATILE"
hinzugefügt. Das Löschen der Variablen erfolgt durch Aufruf der Methode Remove
, beispielsweise Call WshEnv.Remove("EXAMPLE")
.
Die Umgebungsvariablen befinden sich in einer Auflistung und können daher auch anhand ihrer Namen abgefragt werden.
Ermitteln von Netzwerkinformationen
Informationen zum Netzwerk können über die Klasse Wscript.Network
ermittelt werden, von der die Informationen in den Eigenschaften UserName
, ComputerName
, UserDomain
, Organization
, Site
und UserProfile
offengelegt werden. Folgendes Beispiel würde den Benutzernamen im Netzwerk ermitteln:
Wird eine der Eigenschaften vom System nicht unterstützt, so wird ein Fehler ausgelöst.
Anzeigen von Meldungsfeldern
Diese Funktion zeigt eine Meldung an, wobei optional ein Zeitlimit angegeben werden kann, nach dessen Ablaufen das Meldungsfeld automatisch geschlossen wird. Der Nachteil der Verwendung des WSHs zum Anzeigen von Meldungen ist, daß das Meldungsfeld einen eigenen Eintrag in der Taskleiste besitzt. Folgender Code würde eine Meldung anzeigen, die sich nach 3 Sekunden von selbst schließt:
Das automatische Schließen ist optional; um es zu unterbinden, übergibt man als Zeitlimit der Wert 0.
Starten von Anwendungen
Auch die Win32-API bietet zahlreiche Funktionen, über die andere Anwendungen gestartet werden können. Das praktische an der Funktion des WSHs ist, daß keine Win32-API-Deklarationen erforderlich sind.
Optional kann die Anwendung im Starten-und-warten-Modus (engl. shell and wait) gestartet werden. Dabei wird die aufrufende Anwendung so lange blockiert, bis die gestartete Anwendung beendet wird. Im folgenden Beispiel wird der Texteditor mit Starten-und-warten gestartet, wobei die Datei Win.ini
geöffnet wird:
Umgebungsvariablen im Pfad sind zulässig, sie werden zwischen Prozentzeichen (%) gestellt. Der Wert des zweiten Parameters gibt an, in welchem Modus das Fenster geöffnet werden soll. Es werden die Fensterstatuskonstanten der Win32-API-Funktion ShowWindow
unterstützt. Diese Konstanten können der Headerdatei WinUser.h
oder dem API-Viewer entnommen werden. Der letzte Parameter gibt an, ob Starten-und-warten verwendet werden soll.
Zugriff auf die Systemregistrierung
Auf die Systemregistrierung kann kann mittels der Win32-API-Funktionen aus der AdvApi32.dll
zugegriffen werden. Der Zugriff wird jedoch durch Verwendung des WSH bedeutend vereinfacht. Der WSH kann Schlüssel und Werte der Typen Integer
, String
und Binary
in der Systemregistrierung schreiben, löschen und lesen. Folgender Code schreibt beispielsweise drei Werte unter einem eigenen Schlüssel in die Systemregistrierung:
Als Registrierungsschlüssel auf höchster Ebene muß "HKCU"
, "HKLM"
, "HKCR"
, "HKEY_CURRENT_USER"
, "HKEY_LOCAL_MACHINE"
, "HKEY_CLASSES_ROOT"
, "HKEY_USERS"
oder "HKEY_CURRENT_CONFIG"
verwendet werden. Der letzte Parameter gibt den Typ des Wertes an. Folgende Angaben werden unterstützt: "REG_SZ"
, "REG_EXPAND_SZ"
, "REG_DWORD"
, "REG_BINARY"
.
Die Werte können über die Methode RegRead
gelesen werden (z. B. WshShell.RegRead("HKCU\Test\String")
); das Löschen wird durch Aufruf der Methode RegDelete
(z. B. Call WshShell.RegDelete("HKCU\Test\String")
bewerkstelligt.
Erstellen von Verknüpfungen
Erstellen von Dateiverknüpfungen
Das folgende Beispiel erstellt eine Verknüpfung mit dem Texteditor am Desktop. Die Eigenschaften, die angegeben werden können, entsprechen im Allgemeinen denen, die auch im Assistenten zum Erstellen von Verknüpfungen eingestellt werden können. Hervorzuheben ist, daß in den Pfadangaben wiederum auch Umgebungsvariablen unterstützt werden und daß die Eigenschaft WindowStyle
eine der ShowWindow
-Konstanten erwartet. Der Aufruf der Methode Save
erstellt letztendlich die Verknüpfung:
Eigenschaften, die nicht benötigt werden, müssen nicht gesetzt werden. So könnte beispielsweise kein Beschreibungstext angegeben oder die Angabe für das Symbol weggelassen werden.
Erstellen von URL-Verknüpfungen
Diese Funktion unterscheidet sich von jener zum Erstellen von Verknüpfungen lediglich darin, daß eine Datei mit der Dateinamenserweiterung .url
erstellt wird:
Schlußwort
Ein großer Teil der vom WSH gebotenen Funktionen kann durch Visual-Basic-eigene Mittel und Win32-API-Aufrufe ersetzt werden. Dennoch kann mittels des WSHs mit weniger Code eine Lösung gefunden werden. Da der WSH nicht auf jedem System vorinstalliert ist und vorwiegend für die Verwendung in Skripten gedacht ist, zahlt es sich nicht aus, wegen einer einzigen benötigten Funktion eine zusätzliche Abhängigkeit einzugehen.
Downloads
- Beispielprojekt (
WshComponent.zip
) Projekt im Visual-Basic-6.0-Format.