TechNet Magazine > Home > Alle Ausgaben > 2008 > August >  Hey, Scripting Guy!: Auf der Schnellstraße
Hey, Scripting Guy! Auf der Schnellstraße
Die Scripting Guys von Microsoft


In den letzten Monaten durfte einer der Scripting Guys hier im Raum Seattle etwas Neues erleben. Dabei handelt es sich um ein Programm, das in mehreren Städten der USA getestet wird und als „elektronisches Mautsystem“ bezeichnet wird. Im Bundesstaat Washington heißt es jedoch „Good to Go!“.
Es funktioniert ungefähr folgendermaßen: Sie kaufen ein elektronisches Gerät, das Sie an Ihrer Windschutzscheibe befestigen. Zudem eröffnen Sie ein Konto, auf das Sie etwas Geld einzahlen. Jedes Mal, wenn Sie unter einer der Überwachungseinrichtungen auf der Autobahn hindurchfahren, wird von Ihrem Konto automatisch eine Gebühr abgebucht. Im Grunde bezahlen Sie dafür, auf der Autobahn fahren zu dürfen (somit sind unsere Freeways nicht wirklich kostenfrei – offenbar müssen wir sie von nun an „Highways“ nennen, obwohl einige von ihnen vor kurzem tief unter Wasser standen, was sie auch nicht besonders hoch erscheinen ließ), ohne jemals an einem Mauthäuschen anhalten zu müssen.
An vielen Orten, an denen jetzt Mautgebühren erhoben werden, müssen Fahrgemeinschaften nichts bezahlen. Das Interessante an „Good to Go!“ ist jedoch, dass das System nur in der Fahrgemeinschaften vorbehaltenen Spur funktioniert. Sie fragen sich, worin da der Sinn liegt? Warum würde jemand eine Fahrgemeinschaft gründen, wenn er dann doch bezahlen muss? Nun, das muss er nicht. Dieses System ist nur für Personen gebührenpflichtig, die die Spur für Fahrgemeinschaften benutzen möchten, wenn sie allein in ihrem Auto fahren. Der naheliegende Grund für das Benutzen der Spur für Fahrgemeinschaften besteht darin, dass sich in der Regel weniger Fahrzeuge auf dieser Spur befinden. Manchmal ist die Spur für Fahrgemeinschaften die einzige Spur, auf der sich die Autos tatsächlich vorwärts bewegen.
Wie bereits erwähnt, befindet sich dieses System noch in der Erprobungsphase, obwohl sich bereits Tausende dafür angemeldet haben. Es gibt eine Menge Menschen im Raum Seattle, die bereit sind, Geld dafür zu bezahlen, eine Schnellstraße benutzen zu dürfen, um an ihr Ziel zu gelangen.
Im Artikel dieses Monats haben die Scripting Guys beschlossen, ihr eigenes kleines Experiment durchzuführen. Wir möchten Ihnen eine „Schnellstraße“ namens Microsoft® Visual Basic® Express Edition vorstellen. Als Erstes können wir Ihnen mitteilen, dass einer der tollsten Aspekte dieses Produkts darin besteht, dass es wirklich kostenfrei ist. Es werden keine Gebühren erhoben, unabhängig davon, wo Sie diese Informationen verwenden, von wie vielen Benutzern sie verwendet werden oder wie spät es ist. Klingt ziemlich gut, nicht wahr? Natürlich kann es so erscheinen, als ob doch ein geringer Preis damit verbunden ist, da Sie einige neue Dinge lernen müssen. Vielleicht entscheiden Sie jedoch, dass die Vorteile es wert sind.
Bevor wir fortfahren, möchten wir erwähnen, dass uns bewusst ist, dass wir unsere Grenzen ein wenig überschreiten. In der Regel wären die Visual Studio®-Produkte wie Visual Basic und Visual C#® Themen für das MSDN® Magazin und nicht für das TechNet Magazin. Da jedoch MSDN und TechNet anscheinend mehr und mehr zu einer großen zerrütt... – äh, glücklichen – Familie zusammenwachsen, hoffen wir, dass uns diesbezüglich ein kleiner Spielraum gewährt wird. Zudem gilt: Obwohl wir über die Arbeit mit einem traditionellen Entwicklertool schreiben, richten sich unsere Ausführungen nach wie vor an Windows®-Systemadministratoren. Im weiteren Verlauf dieses Artikels werden Sie verstehen, was wir meinen.
Als Erstes müssen Sie Visual Basic installieren. Nein, warten Sie. Laufen Sie nicht weg, nach dem Motto: „Das habe ich nicht!“ oder „Das kann ich mir nicht leisten!“. Microsoft bietet eine Express Edition von Visual Basic an, die Sie unter microsoft.com/express/download kostenlos herunterladen können.
Wir werden hinsichtlich der Arbeit mit Visual Basic Express nicht ins Detail gehen. In der Hilfe sind Lernprogramme enthalten, und die Hilfe selbst ist tatsächlich ziemlich gut. (Kaum zu glauben, oder?) Wir zeigen Ihnen jedoch, wie Sie mithilfe von Visual Basic Express ein bestimmtes Problem in Windows Vista® lösen können (obwohl dieses Beispiel auch bei früheren Versionen von Windows funktioniert). Anschließend können Sie auf eigene Faust damit weiterexperimentieren. Wir werden folgendes Problem lösen: Wie öffnet man in Windows Vista ein Dialogfeld zum Öffnen von Dateien?
Wir haben bereits vor einigen Jahren erklärt, wie ein Dialogfeld zum Öffnen von Dateien mithilfe eines Skripts geöffnet werden kann (siehe den Artikel „Anzeigen eines Dialogfelds für die Auswahl von Dateien“ unter microsoft.com/technet/scriptcenter/resources/qanda/jan05/hey0128.mspx). Dieser Artikel wurde im Januar 2005 veröffentlicht, lange vor der Entwicklung von Windows Vista. Bei der Lösung wird mithilfe des ActiveX®-Steuerelements „UserAccounts.CommonDialog“ ein Dialogfeld zum Öffnen von Dateien geöffnet, in dem Sie nach einer zu öffnenden Datei suchen können. Leider ist dieses Steuerelement ab Windows Vista nicht mehr in Windows enthalten, was bedeutet, dass diese Lösung auf neueren Systemen nicht funktioniert. (Nein, uns hat niemand gefragt, ob das eine gute Idee sei.) Dies bedeutet, dass es unseres Wissens keine Möglichkeit gibt, ein Dialogfeld zum Öffnen von Dateien mithilfe von VBScript zu öffnen. Statt ein Skript zu schreiben, verwenden wir daher Visual Basic zum Schreiben einer Anwendung. Mit dieser Anwendung kann dann unter anderem ein Dialogfeld zum Öffnen von Dateien geöffnet werden.
Ja, Sie haben richtig gehört: In dem Beispiel, das wir Ihnen zeigen werden, wird eine vollständige Anwendung in Visual Basic erstellt. Das klingt vielleicht zuerst ein wenig beängstigend, aber Sie werden sehen, dass Sie mit Visual Basic Express eine vollständige Anwendung genauso einfach wie ein Skript schreiben können. Diese Anwendung wird aus einem Fenster oder Formular bestehen, in dem Sie auf eine Schaltfläche klicken können, über die ein Dialogfeld zum Öffnen von Dateien geöffnet wird. Sie können dann in diesem Dialogfeld Textdateien auswählen, und die Anwendung liest Daten aus diesen Textdateien und zeigt im Formular einen ausgewählten Satz von Inhalten an.
Gut, fangen wir also an. Zunächst wird Visual Basic Express geöffnet. Im ersten Schritt müssen Sie ein neues Projekt erstellen. Hierzu wählen Sie im Menü „Datei“ die Option „Neues Projekt“. Dadurch wird das Dialogfeld „Neues Projekt“ geöffnet. (Wenn Sie eine ältere Version von Visual Basic Express als 2008 verwenden, werden Sie einige kleine Unterschiede gegenüber den Beschreibungen in diesem Artikel feststellen.) Da Sie eine Windows Forms-Anwendung erstellen, wählen Sie die Vorlage „Windows Forms-Anwendung“ aus, und geben Sie den Namen ein, den Sie Ihrem Projekt geben möchten. Im Beispiel wurde das Projekt „ReadFiles“ genannt, wie Sie in Abbildung 1 sehen können.
Abbildung 1 Erstellen eines neuen Projekts in Visual Basic (zum Vergrößern auf das Bild klicken)
Wenn das Projekt erstellt wird, wird automatisch ein neues Formular bereitgestellt, mit dem Sie arbeiten können. In der Anwendung, die Sie erstellen, wird ein Formular angezeigt, das wie das Formular in Abbildung 2 aussieht. Wie bereits erwähnt, enthält das Formular eine Schaltfläche, durch die, wenn auf sie geklickt wird, das Dialogfeld zum Öffnen von Dateien mit dem Ordner „C:\Scripts“ angezeigt wird. Der Benutzer kann dann eine oder mehrere Textdateien an beliebigen Speicherorten im Dateisystem auswählen. Die Anwendung liest dann die erste Zeile aus jeder der ausgewählten Textdateien und zeigt die Ergebnisse im Listenfeld im Formular an. (Falls Ihnen das bekannt vorkommt, haben Sie wahrscheinlich im Anfängerbereich an den Scripting Games 2008 teilgenommen: microsoft.com/technet/scriptcenter/funzone/games/games08/bevent3.mspx.)
Abbildung 2 Das angezeigte ReadFiles-Formular
Um das Formular zu erstellen, müssen Sie Steuerelemente aus der Toolbox in das Projektformular ziehen. Standardmäßig ist die Toolbox auf der linken Seite des Visual Basic-Fensters geöffnet. (Wenn die Toolbox nicht geöffnet ist, klicken Sie auf der linken Seite des Visual Basic-Arbeitsbereichs auf die Schaltfläche „Toolbox“, und erweitern Sie „Alle Windows Forms“.) Klicken Sie in der Toolbox auf „Schaltfläche“, und ziehen Sie dann den Mauszeiger über das Formular, um die Schaltfläche mit der gewünschten Größe zu erstellen. Um der Schaltfläche eine Beschriftung hinzuzufügen, klicken Sie auf die Schaltfläche, die Sie dem Formular gerade hinzugefügt haben, und geben Sie die gewünschte Beschriftung ein. (Alternativ können Sie die Text-Eigenschaft im Dialogfeld „Eigenschaften“ bearbeiten, das sich standardmäßig rechts unten im Visual Basic-Arbeitsbereich befindet.) Im Beispiel wurde die Schaltfläche mit „Browse for Files“ (Nach Dateien suchen) beschriftet. Klicken Sie als Nächstes auf „ListBox“ und dann erneut auf das Formular, und ziehen Sie die Maus, um das Listenfeld zu erstellen. Das Listenfeld wird zum Anzeigen der Zeilen verwendet, die aus den Textdateien ausgelesen werden.
Damit ist die Erstellung des Formulars abgeschlossen. Jetzt kommt der unterhaltsame Teil: Sie müssen dafür sorgen, dass eine Aktion durchgeführt wird, wenn Sie auf die Schaltfläche klicken. Doppelklicken Sie zunächst auf das Schaltflächen-Steuerelement im Formular. Dadurch wird der Code-Editor mit einer bereits für Sie erstellten neuen Unterroutine geöffnet, der Unterroutine „Button1_Click“:
Private Sub Button1_Click _
  (ByVal sender As System.Object, _
   ByVal e As System.EventArgs) _
  Handles Button1.Click
End Sub
Diese Unterroutine wird immer dann ausgeführt, wenn auf die Schaltfläche im Formular geklickt wird. Wie Sie sehen können, ist diese Unterroutine momentan leer. Sie müssen den Code hinzufügen, der der Anwendung mitteilt, welche Aktion beim Klicken auf die Schaltfläche durchgeführt werden soll. Welche Aktion soll nun durchgeführt werden? Nun, zuerst soll das getan werden, von dem wir Ihnen am Anfang dieses Artikels versprochen haben, dass wir es Ihnen zeigen würden: das Öffnen eines Dialogfelds zum Öffnen von Dateien. Wie bei nahezu allen Schritten, die Sie mit Visual Basic durchführen, wird hierfür Microsoft .NET Framework verwendet.
Zunächst werden oberhalb der Unterroutine zwei Imports-Anweisungen hinzugefügt:
Imports System
Imports System.IO
Diese Anweisungen geben .NET Framework-Namespaces an. Da Sie Klassen aus diesen Namespaces verwenden werden, importieren Sie sie an dieser Stelle, damit Sie einfach auf die gewünschten Klassen verweisen können. Beachten Sie, dass wir gesagt haben, dass Sie diese Anweisungen oberhalb der Unterroutine einfügen sollten. Imports-Anweisungen sind global, was bedeutet, dass sie nicht innerhalb einer Unterroutine oder Funktion verwendet werden können. Sie müssen außerhalb dieser Elemente für sich allein stehen.
Sofern Sie nicht die Option Explicit-Anweisung am Anfang Ihres Skripts hinzufügen, müssen Sie in VBScript Variable nicht explizit deklarieren. In Visual Basic wird diese Anweisung automatisch hinzugefügt, sodass Sie alle Variablen deklarieren müssen. Sie benötigen eine Variable zum Speichern eines Verweises auf das OpenFileDialog-Objekt (das zufällig das Dialogfeld zum Öffnen von Dateien darstellt):
Dim dlg As Windows.Forms.OpenFileDialog
Nachdem Sie nun eine Variable vom Typ „OpenFileDialog“ (mit „Dim“) deklariert haben, können Sie folgendermaßen eine neue Instanz dieses Objekts erstellen:
dlg = New OpenFileDialog()
Sie haben jedoch noch immer nicht das Dialogfeld angezeigt. Zuerst müssen Sie einige Eigenschaften festlegen:
dlg.Multiselect = True
dlg.InitialDirectory = "c:\scripts"
dlg.Filter = "txt files (*.txt)|*.txt|" & _
  "All files (*.*)|*.*"
Die Multiselect-Eigenschaft gibt an, ob der Benutzer mehr als eine Datei im Dialogfeld zum Öffnen von Dateien auswählen darf. Sie möchten, dass er dazu in der Lage ist, und setzen diese Eigenschaft daher auf „True“. Die InitialDirectory-Eigenschaft wird auf „C:\Scripts“ gesetzt. Wenn Sie diese Eigenschaft nicht festlegen, wird im Dialogfeld das Hauptverzeichnis des Computers geöffnet.
Zu guter Letzt legen Sie die Filter-Eigenschaft fest:
dlg.Filter = "txt files (*.txt)|*.txt|" & _
  "All files (*.*)|*.*"
Hierbei wird gefiltert, welche Dateien im Dialogfeld angezeigt werden. Es sollen nur .txt-Dateien angezeigt werden. Durch Festlegen dieser Eigenschaften erhalten Sie ein Dialogfeld zum Öffnen von Dateien, das so ähnlich wie das in Abbildung 3 aussieht.
Abbildung 3 Das Dialogfeld „Öffnen“, in dem nur Textdateien angezeigt werden (zum Vergrößern auf das Bild klicken)
Jetzt ist es endlich an der Zeit, das Dialogfeld anzuzeigen. Hierzu verwenden Sie die ShowDialog-Methode:
dlg.ShowDialog()
Die ShowDialog-Methode gibt einen Wert zurück, der angibt, ob der Benutzer auf „Öffnen“ geklickt hat, um die ausgewählten Dateien zu öffnen, oder ob er auf „Abbrechen“ geklickt hat, um das Dialogfeld zu schließen. Wenn der Benutzer auf „Abbrechen“ klickt, soll keine Aktion durchgeführt werden. Daher fügen Sie den Aufruf von ShowDialog in eine If-Anweisung ein, um sicherzustellen, dass der Benutzer auf „Öffnen“ geklickt hat, bevor fortgefahren wird:
If dlg.ShowDialog() = _
  Windows.Forms.DialogResult.OK Then
Ja, wir wissen, dass anstelle der Open-Eigenschaft die OK-Eigenschaft geprüft wurde. Im Grunde ist die Schaltfläche „Öffnen“ jedoch mit der Schaltfläche „OK“ identisch – es ist einfach viel sinnvoller, die Schaltfläche „Öffnen“ anzuzeigen.
Jetzt müssen Sie wissen, welche Dateien der Benutzer im Dialogfeld ausgewählt hat. Die Dateinamen sind in der FileNames-Eigenschaft des OpenFileDialog-Objekts enthalten. Daher richten Sie eine For Each-Schleife ein, um die in dieser Eigenschaft enthaltenen Dateinamen zu lesen:
For Each strName In dlg.FileNames 
Hoppla! Es wurde vergessen, strName zu deklarieren:
Dim strName As String
Jetzt müssen Sie jede dieser Dateien öffnen und Daten aus ihnen lesen. Hierzu verwenden Sie in Visual Basic einen Using-Block:
Using sr As StreamReader = File.OpenText(strName)
VBScript-Skriptersteller sind mit Using-Blöcken nicht vertraut, da sie in VBScript nicht existieren. Mit Visual Basic können Systemressourcen etwas besser (zugegeben, in vielen Fällen viel besser) als mit VBScript verwaltet werden. Der Sinn einer Using-Anweisung besteht darin sicherzustellen, dass beim Beenden des Blocks Systemressourcen freigegeben werden. In diesem Fall stellen Sie einfach sicher, dass Dateiinhalte und große Speicherblöcke freigegeben werden.
Wir wissen, dass das ein wenig kompliziert klingt. Sie sollten dies jedoch einfach wie eine Set-Anweisung betrachten. Es wird einfach eine Instanz eines neuen Objekts – in diesem Fall ein StreamReader-Objekt – erstellt und dem von der File.OpenText-Methode zurückgegebenen Textdatenstrom zugewiesen. Beachten Sie, dass der Name der zu öffnenden Datei an OpenText übergeben wird – die Datei aus der FileNames-Auflistung, die derzeit durchlaufen wird.
Daher enthält die StreamReader-Variable „sr“ den Inhalt der Datei. Jetzt benötigen Sie eine weitere Variable:
Dim strLine As String
Diese Variable wird zum Speichern der ersten Zeile der gerade geöffneten Textdatei verwendet:
strLine = sr.ReadLine()
Die erste Zeile wird aus der Datei gelesen, indem die ReadLine-Methode für das StreamReader-Objekt aufgerufen wird. (Wie bereits erwähnt, enthält das StreamReader-Objekt den Inhalt der Datei.) Sie speichern diese Textzeile in der Variablen „strLine“.
Jetzt rufen Sie einfach die Add-Methode für das ListBox-Objekt auf, um dem Listenfeld diese Zeile hinzuzufügen:
ListBox1.Items.Add(strLine)
In diesem Beispiel wird nur die erste Zeile der Datei gewünscht, sodass StreamReader – der vollständige Text der Textdatei wird nicht mehr benötigt – und der Using-Block geschlossen werden können:
sr.Close()
End Using
Danach wird die Schleife erneut durchlaufen, um nach der nächsten Datei zu suchen, die im Dialogfeld zum Öffnen von Dateien ausgewählt wurde. Dieser Vorgang wird so lange wiederholt, bis alle ausgewählten Dateien gelesen und dem Listenfeld alle Zeilen hinzugefügt wurden. Der fertige Code sieht wie der in Abbildung 4 aus.
Sehen Sie, wir haben Ihnen doch gesagt, dass das Erstellen einer Anwendung nicht viel schwieriger ist als das Erstellen eines Skripts.
Sie können Ihre Anwendung testen, indem Sie F5 drücken (oder auf der Symbolleiste „Debuggen“ auf die Schaltfläche „Debugging starten“ klicken). Wenn Sie auf die Schaltfläche klicken und dann eine oder mehrere Dateien im Dialogfeld zum Öffnen von Dateien auswählen, sollten die Ergebnisse in etwa wie in Abbildung 5 aussehen.
Abbildung 5 Die im Listenfeld angezeigten ersten Zeilen ausgewählter Dateien
Wenn Ihre Anwendung genau wie vorgesehen ausgeführt wird, wählen Sie im Menü „Erstellen“ die Option „ReadFiles (bzw. Name Ihres Projekts) erstellen“ aus. Dadurch wird eine .exe-Datei namens „ReadFiles.exe“ erstellt, die Sie genau wie jede andere Anwendung ausführen und an Ihre Benutzer verteilen können.
Uns ist bewusst, dass Ihnen dieses Verfahren möglicherweise nicht wie eine „Schnellstraße“ zur Verwendung des Dialogfelds zum Öffnen von Dateien vorgekommen ist. Wenn Sie aber die Tatsache berücksichtigen, dass dies ab Windows Vista durch Schreiben eines Skripts überhaupt nicht möglich ist, erscheint das Schreiben einer einfachen Anwendung möglicherweise wie ein geringer Preis. Erneut lässt sich dieses Verfahren mit dem Zahlen einer Gebühr für das Benutzen der Autobahn vergleichen: Es kann etwas umständlich sein, aber letzten Endes erreichen Sie Ihr Ziel.
Ein zusätzlicher Vorteil der Verwendung von Visual Basic für einen solchen Zweck besteht darin, dass Sie jetzt mit einem Tool zu arbeiten begonnen haben, das leistungsfähiger als VBScript ist und das Ihnen ermöglicht, mühelos Anwendungen mit einer ansprechenden Benutzeroberfläche zu erstellen: ein enormer Bonus. Systemadministratoren werden zahlreiche weitere Verwendungszwecke für Visual Basic finden.
Bedenken Sie zudem: Sie müssen nicht das Fahren neu lernen, um die neue gebührenpflichtige Spur verwenden zu können, sondern sich einfach an die Tatsache gewöhnen, dass die Fahrzeuge vor Ihnen sich tatsächlich bewegen. Wenn Sie mit VBScript vertraut sind, gilt analog zu, dass Sie keine vollständig neue Sprache erlernen müssen, um Visual Basic verwenden zu können, sondern Sie müssen sich einfach nur daran gewöhnen, dass Ihnen viele neue Möglichkeiten offen stehen.
Der Scripting Perplexer von Dr. Scripto
Die monatliche Herausforderung, die nicht nur Ihr Talent zum Rätsellösen testet, sondern auch Ihre Skriptingfähigkeiten.

August 2008: Skriptingalphabet
Im Rätsel dieses Monats müssen Sie die Buchstaben A bis Z in die leeren Felder eintragen, um ein Wort zu erhalten, das in irgendeiner Weise mit der Skripterstellung zusammenhängt. Jeder Buchstabe (A bis Z) darf nur einmal verwendet werden, und die Buchstaben erscheinen nicht in alphabetischer Reihenfolge. Der eingefügte Buchstabe könnte am Anfang, am Ende oder irgendwo in der Mitte des Worts stehen. In der ersten Zeile wurde beispielsweise bereits der Buchstabe C eingetragen, um das Wort SCRIPT zu erhalten:

Show Answer

Die Scripting Guys arbeiten für Microsoft (oder sind zumindest dort angestellt). Wenn sie nicht gerade ihrem Hobby, dem Baseball (oder verschiedenen anderen Aktivitäten) nachgehen, betreiben sie das TechNet-Skriptcenter. Besuchen Sie es unter www.scriptingguys.com.

© 2008 Microsoft Corporation und CMP Media, LLC. Alle Rechte vorbehalten. Die nicht genehmigte teilweise oder vollständige Vervielfältigung ist nicht zulässig.
Page view tracker