DOCUframe, Windows Script Host (WSH) und Visual Basic Scripting (VBScript)

DOCUcontrol-Funktion „ExecuteVBScript“

Die DOCUcontrol-Funktion „ExecuteVBScript“ ermöglicht die Ausführung von Visual-Basic-Script-Programmen unter der Regie von Microsoft’s Windows Script Host (ehemals Windows Scripting Host: WSH).

Näheres zu der DOCUcontrol-Funktion „ExecuteVBScript“, sowie ein kleines Beipiel zur Steuerung von Excel finden Sie im Abschnitt „Funktionen/System“ in der DOCUcontrol-Dokumentation von DOCUframe der Firma GSD.

Das WSH-Objekt-Modell stellt über das Root-Objekt „WScript“ einige sog. „Automation Objects“ zur Verfügung, die u.a. von VB-Scripts verwendet werden können. So z.B. die Automation Objects „WshShell“ oder „WshNetwork“. Die Implementierung der Laufzeit-Umgebung (Runtime Environment) des WSH erfolgt über das OCX (Object Linking and Embedding „OLE“ Custom Control) „wshom.ocx“.

Ebenfalls Bestandteil des WSH sind die beiden „Script Hosts“ WScript.exe und CScript.exe. WScript.exe ist Windows-basiert und CScript.exe textbasiert.

Weitere Komponenten sind die beiden „Script Engines“ Microsoft VBScript in Form der Dynamic Link Library (DLL) „vbscript.dll“ und Microsoft JScript mit der DLL „jscript.dll“. Weitere Script Engines, z.B. für Perl oder Python sind verfügbar, werden aber nicht standardmäßig mit den Windowsbetriebssystemen ausgeliefert.

Eine Übersicht über verfügbare Script Engines finden Sie in dem englischen Wikipedia-Artikel „Windows Scripting Host“.

Kleines DOCUframe-Beispiel mit Windows Script Host

Als Beispiel für den Einsatz des WshShell-Objektes aus DOCUframe folgende kleine Aufgabenstellung.
In den Anwendungs-Log von Windows (Eventlog) soll aus DOCUframe heraus ein neuer Eintrag geschrieben werden:

DOCUframe schreibt in den Windows Event Log

Lediglich zwei Zeilen VB-Script-Code reichen aus, um dieses Ziel zu erreichen. Um diese Funktion flexibel nutzen zu können, hüllen wir das Ganze in ein benanntes DOCUframe-Makro mit zwei Eingabeparametern. Der erste Parameter steht für den Typ des Eintrags in den Event-Log und der zweite für den gewünschten Text.

Als Eintrags-Typen sind möglich:

  • 0 SUCCESS
  • 1 ERROR
  • 2 WARNING
  • 4 INFORMATION
  • 8 AUDIT_SUCCESS
  • 16 AUDIT_FAILURE

Das Makro liefert TRUE zurück, falls die Ausführung des kleinen VB-Scriptes erfolgreich war, andernfalls wird FALSE zurückgegeben.

Hier nun das kleine DOCUcontrol-Makro „OFWriteApplicationEventLog“:

BOOL OFWriteApplicationEventLog( INT Type, STRING Message )

  DBSTRINGSET VBScript;
  
  DBStrAdd( VBScript, "Set objShell = CreateObject(\"Wscript.Shell\")");
  DBStrAdd( VBScript, "objShell.LogEvent " + IntToStr( Type ) + ", \"" + Message + "\"");
  
RETURN( ExecuteVBScript( VBScript ) )

Kontrollausgabe im GSD-Monitor-Programm

Ausgabe des Aufrufergebnisses in den GSD Monitor

Eintrag im Applikations-Eventlog von Windows

DOCUframe schreibt eine Meldung in den Eventlog von Windows

Das „Gespann“ DOCUcontrol-Funktion „ExecuteVBScript“, WSH und Visual Basic Script eröffnet in Verbindung mit anderen OLE-Automation-Objekten viele Möglichkeiten, die auf anderem Wege gar nicht oder nur sehr schwer zu erreichen wären.

Der DOCUframe COM-Server „GSDX.DLL“

Auch der DOCUframe-Client selbst lässt über den mitgelieferten COM-Server in Form der DLL „GSDX.DLL“ auf diese Art und Weise fernsteuern. So kann man z.B. über die Methode „InterfaceExe“ ein vorhandenes Schnittstellenmakro aufgerufen werden.

WScript.CreateObject versus CreateObject von VBScript

Noch ein Hinweis für eigene Versuche mit dem Windows Script Host und WScript:

Die direkten WScript-Methoden und -Eigenschaften, wie „WScript.CreateObject“ (Methode), „WScript.Echo“ (Methode) oder „WScript.Version“ (Property) können innerhalb der VBScript-Applikation nicht verwendet werden, da sie nur innerhalb eines Windows Script Host-Prozesses, d.h. WScript.exe oder CScript.exe wurde aufgerufen und damit einem instanzierten WScript-Objekt vorhanden sind.

Verwenden Sie daher immer zum Erzeugen einer Objekt-Instanz die VBScript-Methode „CreateObject“ und nicht die Methode „CreateObject“ von WScript. Sie erhalten sonst eine Fehlermeldung:

Laufzeitfehler in Microsoft VBScript: Objekt erforderlich: 'WScript' in Zeile 0 an Position 0, Fehlercode 800a01a8

Wie geht es weiter?

Wie man die Version des aktuell installierten Windows Script Host auslesen kann, auch wenn man nach Aufruf von „ExecuteVBScript“ das WScript-Objekt mit der Eigenschaft „Version“ nicht zur Verfügung steht, stelle ich in einem weiteren, zukünftigen Beitrag vor.

In späteren Blog-Beiträgen werde ich auch auf weitere interessante Einsatzmöglichkeiten des Windows Script Hosts in Verbindung mit DOCUframe eingehen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert