Externes Programm aufrufen

Externes Programm aufrufen

VBScript:

  1. Dim oWSHShell
  2. Dim Aufruf
  3.  
  4. Aufruf = """C:\Program Files\irgendeine.exe""" ' Auf Leerzeichen achten, oftmals Maskierung sinnvoll
  5. Set oWSHShell = CreateObject("WScript.Shell")
  6. oWSHShell.Run Aufruf

Um einen Pfad nachträglich zu maskieren, benötigt man reichlich Anführungszeichen:

  1. Pfad = """" & Pfad & """"
  2. 'oder wenn sowieso die Zeichenkette zusammengesetzt werden muss
  3. Pfad = Chr(34) & Pfad & Chr(34)

JScript:

  1. function openProg(progname)
  2. {
  3. // progname = Pfad zum Programm (String)
  4. var oWSHShell = new ActiveXObject("WScript.Shell");
  5. oWSHShell.Run(progname, 10, true);
  6. }

DOS Befehle ausführen

Manchmal ist es sinnvoll, einen DOS-Befehl aus einer Skriptdatei heraus auszuführen. Dabei muss der Pfad zum Kommandozeileninterpreter (command.com oder cmd.exe) expliziet angegeben werden, was über die Umgebungsvariable COMSPEC geschehen kann.
Nachfolgendes Beispiel zeigt den Inhalt von C:\ an:

  1. Set ws = CreateObject("WScript.Shell")
  2. ws.Run "%COMSPEC% /K DIR C:\",1


%COMSPEC% ist je nach Betriebssystem die Umgebungsvariable für command.com oder cmd.exe
%COMSPEC% /K bedeutet: Eingabeaufforderung bleibt geöffnet
%COMSPEC% /C bedeutet: Schließen der Eingabeaufforderung nach Ausführung des Befehls

Grundsätzlich poppt eine Eingabeaufforderung auf. Diese kann jedoch unterdrückt werden. Das nachfolgende Beispiel läuft unsichtbar ab und löscht eine Datei:

  1. Set ws = CreateObject("WScript.Shell")
  2. ws.Run "%COMSPEC% /C DEL C:\test.txt",0

Rückgabewert verarbeiten

Ruft man per Skript ein externe Kommandozeilentool auf und möchte die Rückgabewert dieses Tools im Skript weiterberarbeiten, so scheitert einen Umleitung der Programmausgaben mittels ">" bzw. "»" in eine Datei. Es tritt dann ein Fehler auf. Es gelingt aber mit dem Windows Scripting Host-Befehl WshShell.Exec

VBScript:

  1. 'Bsp.: Ausgabe des DIR-Befehls
  2. Aufruf = "%COMSPEC% /C DIR C:\"
  3. Set WshShell = CreateObject("WScript.Shell")
  4. Set oExec = WshShell.Exec(Aufruf)
  5. Ausgabe = oExec.StdOut.readall
  6. MsgBox Ausgabe

Das führt aber zu dem unschönen Effekt, dass sich kurz ein DOS-Fenster öffnet. Um das zu umgehen kann der Aufruf mit Hilfe der Funktion ExecHidden realisiert werden:

VBScript:

  1. 'Bsp.: Ausgabe des DIR-Befehls
  2. Aufruf = "%COMSPEC% /C DIR C:\"
  3. Ausgabe = ExecHidden (Aufruf)
  4. MsgBox Ausgabe
  5.  
  6. Function ExecHidden (CMD)
  7. ' v3.A - Quelle: http://dieseyer.de/dse-wsh-scr-b.html
  8. Dim FileOut, oWsh, Tmp
  9.  
  10. CMD = Replace( CMD, """", """""" )
  11. Tmp = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%Temp%") & "\" & "ExecHidden.VBS"
  12. Set FileOut = CreateObject("Scripting.FileSystemObject").OpenTextFile( Tmp , 2, true)
  13. FileOut.WriteLine( " Set oExec = WScript.CreateObject(""WScript.Shell"").Exec(""" & CMD & """) " )
  14. FileOut.WriteLine( " WScript.CreateObject(""WScript.Shell"").Environment( ""volatile"" )( ""Eregbnis"" ) = oExec.StdOut.ReadAll() " )
  15. FileOut.Close
  16. Set FileOuT = nothing
  17. Set oWsh = CreateObject("WScript.Shell")
  18. oWsh.Run "CScript.exe //NOLOGO " & Tmp , 0, true
  19. ExecHidden = oWsh.Environment("volatile")( "Eregbnis" )
  20. 'zum Löschen der 'Tmp-Datei nächste Zeile frei geben
  21. CreateObject("Scripting.FileSystemObject").DeleteFile( Tmp )
  22. End Function

URL aufrufen

In gleicher Weise können auch Webseiten aufgerufen werden

VBScript:

  1. Dim oWSHShell
  2.  
  3. Set oWSHShell = CreateObject("WScript.Shell")
  4. oWSHShell.Run "http://www.fixfoto.info/"

JScript:

  1. function openLink(url)
  2. {
  3. // url = Link zur Website (String)
  4. var oWSHShell = new ActiveXObject("WScript.Shell");
  5. oWSHShell.Run(url,0,false);
  6. }