Windows Scripting Host en VBScript
- Datum:
- Auteur: Stefan Cruysberghs
De Windows Scripting Host is een scripttaal voor 32-bit Windows-gebaseerde platforms. Vanaf Windows 98 is het geïntegreerd in het besturingssysteem. De huidige ActiveX architectuur heeft vele voordelen t.o.v. de oude MS-DOS commando’s en deze kunnen met scripttalen zoals Visual Basic Script (VBScript) en Java Script (JScript) aangesproken worden. WSH zorgt ervoor dat scripts direct uitgevoerd kunnen worden vanuit de desktop of prompt zonder dat er gebruikt dient gemaakt te worden van een HTML document. Vanuit scriptbestanden kunnen COM objecten aangesproken worden, sleutels in de registry gewijzigd worden, snelkoppelingen aangemaakt worden, bestanden gekopieerd worden, … Alle tekst-bestanden met de extentie VBS of JS worden automatisch gestart. Via enkele voorbeeldjes zal ik de basis van het programmeren in VBScript trachten uit te leggen.
De script-talen zijn ook object-georiënteerd en werken dus ook met objecten, properties en methods. De meeste script-bestanden beginnen dan ook met volgende regel waarin het veelgebruikte shell-object wordt aangemaakt.
Set WshShell = WScript.CreateObject("WScript.Shell")
Met het commando InputBox kan je een invoer van de gebruiker vragen en met de method Popup kan je een berichtvenster tonen. Voor de rest kunnen we zoals in Visual Basic gewoon variabelen aanmaken.
Set WshShell = WScript.CreateObject("WScript.Shell")
naam = InputBox("Geef je naam : ")
WshShell.Popup "Hallo " & naam & ", dit is je eerste VBScript-programmetje"
Een ander zeer interessant object is FileSystemObject waarmee je allerlei operaties op bestanden kan uitvoeren (kopiëren, verwijderen, verplaatsen, …). Dit object heeft een hele reeks methods zoals CreateFolder, CopyFile, CopyFolder, DeleteFile, DeleteFolder, DriveExists, FileExists, MoveFile, MoveFolder, …
Set FileSysObj = CreateObject("Scripting.FileSystemObject")
FileSysObj.CopyFile "c:\mijn documenten\stefan.doc","e:\stefan_kopie.doc"
FileSysObj.DeleteFolder "c:\temp"
If FileSysObj.DriveExists("e") Then
WshShell.Popup "Drive E bestaat"
Else
WshShell.Popup "Drive E bestaat niet"
End If
Met VBScript kunnen ook OLE-objecten en applicaties aangesproken worden.. OLE (object linking and embedding) en zijn opvolger COM (component object model) zijn technologieën van Microsoft waarmee applicaties met elkaar kunnen communiceren. Eigenlijk worden de functionaliteit van het ene programma beschikbaar vanuit het andere programma.
In onderstaand voorbeeld wordt er een MS Word-OLE-object aangemaakt. Word wordt zichtbaar gemaakt en nadat er een nieuwe pagina is aangemaakt wordt deze opgevuld met 2 regels, waarbij de eerste regel een groot en vet lettertype krijgt. Je moet enkel in VBScript het OLE-object aanmaken met de functie CreateObject :
Set WordObj = WScript.CreateObject("Word.Application")
Nadien kan je de Visual Basic for Applications objecten en functies gebruiken en komt er eigenlijk geen VBScript meer aan te pas. Voor de mogelijkheden van VBA raadpleeg je best de help bij een van de Office-onderdelen (Word/Excel/Access/Powerpoint/Outlook).
Dim WSHShell
Set WSHShell = WScript.CreateObject("WScript.Shell")
WScript.Echo "Dit is een VBScript en Word Visual Basic for Applications demo"
Dim WordObj
Set WordObj = WScript.CreateObject("Word.Application")
WordObj.Visible = True
WordObj.Documents.Add
Dim Bereik
Set Bereik = WordObj.ActiveDocument.Range(0,0)
Bereik.InsertParagraph
Bereik.InsertBefore "Dit is een eerste regel"
Bereik.Font.Size = 20
Bereik.Font.Bold = True
Bereik.InsertAfter"Dit is een tweede regel"
In onderstaand voorbeeld wordt de Excel OLE server gebruikt waarmee een werkblad in Excel aangemaakt wordt. Nadien wordt er op het bureaublad een snelkoppeling naar dit bestand gecreëerd. Nu kunnen de VBA-instructies van Excel gebruikt worden voor het aanmaken van het werkblad en het opvullen van de cellen.
Dim WSHShell
Set WSHShell = WScript.CreateObject("WScript.Shell")
Dim ExcelObj
Set ExcelObj = WScript.CreateObject("Excel.Application")
ExcelObj.Visible = False
ExcelObj.WorkBooks.Add
ExcelObj.Columns(1).ColumnWidth = 30
ExcelObj.Columns(2).ColumnWidth = 50
ExcelObj.Cells(1,1).Value = "VBScript en Excel OLE Server"
ExcelObj.Range("A1:A1").Select
ExcelObj.Selection.Font.Bold = True
ExcelObj.Selection.Font.Size = 16
ExcelObj.Selection.Font.ColorIndex = 3
ExcelObj.Cells(3,1).Value = "Naam scripttaal"
ExcelObj.Cells(3,2).Value = WScript.Name
ExcelObj.Cells(4,1).Value = "Versie"
ExcelObj.Cells(4,2).Value = WScript.Version
ExcelObj.Cells(5,1).Value = "Pad Desktop-folder"
ExcelObj.Cells(5,2).Value = WSHShell.SpecialFolders("Desktop")
ExcelObj.Cells(6,1).Value = "Pad Startmenu-folder"
ExcelObj.Cells(6,2).Value = WSHShell.SpecialFolders("StartMenu")
ExcelObj.ActiveWorkbook.SaveAs("C:\Mijn Documenten\Test01.xls")
ExcelObj.Application.Quit
Dim Snelkoppeling, DesktopPad
DesktopPad = WSHShell.SpecialFolders("Desktop")
Set Snelkoppeling = WSHShell.CreateShortcut(DesktopPad & "\WSH Test.lnk")
Snelkoppeling.TargetPath = "C:\Mijn Documenten\Test01.xls"
Snelkoppeling.WorkingDirectory = "C:\Mijn Documenten"
Snelkoppeling.WindowStyle = 4
Snelkoppeling.IconLocation = WSHShell.ExpandEnvironmentStrings("%windir%\Explorer.exe,5")
Snelkoppeling.Save
WScript.Echo "Snelkoppeling naar nieuw Excel werkblad is aangemaakt"