Zum Inhalt springen

Visual Basic Script (VBS): Einführung

Aus Wikibooks

>> Zurück zum Inhaltsverzeichnis


Grundlagen

[Bearbeiten]

1. Konstanten und Variablen

VBS arbeitet mit 2 verschiedenen Arten von Befehlen:

  1. Befehle, die man über ein Objekt einleiten kann (Methodenaufrufe).
  2. Befehle, die von VBS schon vordefiniert sind.

"Hallo Welt" als Popup

Dim ObjShell
Set ObjShell = CreateObject("WScript.Shell")
ObjShell.Popup "Hallo Welt!", "3", "Testprogramm"

Speichert man dieses Skript als Datei mit der Endung .vbs (oder .vbe), kann man es entweder per Doppelklick oder über die Eingabeaufforderung mit dem Befehl "cscript <Dateiname>" ausführen. Wird die Eingabeaufforderung als Administrator gestartet, läuft auch das Skript mit erhöhten Rechten.
Das Skript öffnet ein Fenster mit der Meldung "Hallo Welt!" und dem Titel "Testprogramm", das 3 Sekunden lang angezeigt wird.

Die Option Explicit

[Bearbeiten]

Wenn man in die erste Zeile des Programms "Option Explicit" schreibt, müssen alle Variablen vor Benutzung deklariert werden. Dies geschieht mit dem Dim-Befehl.

Option Explicit
Dim Var1, Var2
Var3 = 5  ' Fehler: Variable ist nicht definiert: 'Var3'

Falls eine Variable nicht deklariert wurde, wird ein Fehler ausgegeben. Das ist hilfreich, weil ohne "Option Explicit" ein einfacher Tippfehler, z.B. "Var" statt "Var1", ungewollt zu einer neuen Variablen würde.

InputBox/MsgBox

[Bearbeiten]
Dim Name
Name = InputBox("Bitte geben sie ihren Namen ein!", "Name?", "Ihr Name")
MsgBox "Ihr Name lautet " & Name & "!", vbOKOnly, "Ihr Name!"

Öffnet einen Dialog der nach ihren Namen fragt, speichert den eingegebenen Namen in die Variable Name und gibt sie danach per MsgBox() aus.

Arbeiten mit den Grundrechenarten

[Bearbeiten]
Option Explicit
Dim Mode 
Mode = InputBox("Bitte wählen Sie die gewünschte Rechenart aus. Einfach +, -, * oder / eingeben.", "Modus", "")
If Mode = "" Then
   Wscript.Quit
End If
Dim a, b, Result
a = InputBox("Bitte Wert 1 eingeben", "Eingabebox", "Hier die Zahl eingeben")
b = InputBox("Bitte Wert 2 eingeben", "Eingabebox", "Hier die Zahl eingeben")
If Mode = "+" Then
  Result = a -- b 
ElseIf Mode = "-" Then
  Result = a - b
ElseIf Mode = "*" Then 
  Result = a * b
ElseIf Mode = "/" Then
  Result = a / b
End If
MsgBox "Das Ergebnis ihrer Rechnung lautet: " & Result, vbInformation, ""

Diese Anwendung ist in der Lage, je nach angegebener Operation einen Wert mit einem anderen zu addieren, die Werte zu subtrahieren etc.
Wichtig bei einer Addition:
Man sollte statt + -- verwenden, sonst lautet das Ergebnis "12" + "3" = "123", denn InputBox() liefert einen String und '+' wird neben '&' ebenfalls als Stringverkettung interpretiert.
Zwei andere Wege dieses Problem zu umgehen ist 0 + a + b zu schreiben oder die Typen von a und b explizit in Zahlentypen umzuwandeln:

a = CDbl(a)
b = CDbl(b)

Es sei angemerkt, dass die Zahleninterpretation von den Spracheinstellungen des Betriebssystems abhängt. Der String "1.200" kann als 1200 oder 1,2 interpretiert werden.

Datei kopieren

[Bearbeiten]
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.copyFile "Urpfad", "Zielpfad", True

Dieses Skript kopiert die Datei von "Urpfad" nach "Zielpfad"
Die Option "True" überschreibt ggf. die Zieldatei, "False" liefert dagegen einen Fehler.

Datei löschen

[Bearbeiten]
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.DeleteFile "Müll.txt", False

Dieses Skript löscht die Datei "Müll.txt".
Die Option "False" respektiert das "Schreibgeschützt"-Attribut der Datei (und liefert ggf. einen Fehler), "True" würde die Datei trotz ihres Attributs löschen.

Programme starten

[Bearbeiten]
Dim ObjShell
Set ObjShell= CreateObject("WScript.Shell")
ObjShell.Run "CMD"

Dieses Programm öffnet den Windows Befehlsprozessor (cmd.exe).
Man kann mit diesem Befehl auch eine Internetseite aufrufen:

Dim ObjShell
Set ObjShell = CreateObject("WScript.Shell")
ObjShell.Run "https://de.youtube.com/"

Tastatureingaben senden

[Bearbeiten]
Dim ObjShell
Set ObjShell= CreateObject("WScript.Shell")
ObjShell.Run "Notepad"
ObjShell.SendKeys "Test"
ObjShell.SendKeys "{ENTER}"

Mit diesem eher unnötigem Skript kann man ein Programm öffnen und dann eine Tastatureingabe simulieren. Das hat in der Praxis nach Meinung von Experten mehr Schadensmöglichkeiten als nutzen. Alle Tastenkeys: [[1]]

Registry-Schlüssel/Wert schreiben

[Bearbeiten]
Dim ObjShell
Set ObjShell = CreateObject("WScript.Shell")
ObjShell.RegWrite "HKEY_CURRENT_USER\Software\Wikipedia\", ""
ObjShell.RegWrite "HKEY_CURRENT_USER\Software\Wikipedia\URL", "https://de.wikipedia.org"
ObjShell.RegWrite "HKEY_CURRENT_USER\Software\Wikipedia\Artikel", "2000000", "REG_DWORD"

Erstellt einen Schlüssel "Wikipedia" mit einem (String-)Eintrag "URL" und einem (Zahlen-)Eintrag "Artikel".
Achtung: Zum Erstellen/Überschreiben mancher Schlüssel (wie z.B. Schlüssel die mit "HKEY_LOCAL_MACHINE" anfangen) benötigt man administrative Rechte.

Registry-Schlüssel/Wert auslesen

[Bearbeiten]
Dim ObjShell
Set ObjShell = CreateObject("WScript.Shell")
Dim URL, Artikel
URL = ObjShell.RegRead("HKEY_CURRENT_USER\Software\Wikipedia\URL")
Artikel = ObjShell.RegRead("HKEY_CURRENT_USER\Software\Wikipedia\Artikel")
ObjShell.Popup "Wikipedia, erreichbar unter " & URL & " hat über " & Artikel & " Artikel", "3", ""

Liest die Werte der im oben erstellten Schlüssel und gibt die Meldung "Wikipedia, erreichbar unter https://de.wikipedia.org hat über 2000000 Artikel" aus.

Registry-Schlüssel/Wert löschen

[Bearbeiten]
Dim ObjShell
Set ObjShell = CreateObject("WScript.Shell")
ObjShell.RegDelete "HKEY_CURRENT_USER\Software\Wikipedia\"

Löscht die in den Beispielen erstellten Schlüssel wieder.