Hey, Scripting Guy!Die Blumen blühen. Die Dialogfelder sprießen. Der Frühling ist da.

Die Scripting Guys von Microsoft

Endlich ist der Frühling da. Und das ist auch gut so. Nach einem Winter mit rekordverdächtigen Regenfällen, Eis, Schnee und heftigen Stürmen – bei einem dieser Stürme stürzte ein großer Baum in den Garten eines der Scripting Guys und verfehlte sein Haus nur um Zentimeter – ist jetzt endlich der Frühling da, und die gelegentlichen kühlen Regenschauer sind ein angenehmer Auftakt, bevor der wärmere Regen aus dem Nordwestpazifik den Sommer einleitet.

Bei dem Nieselregen draußen dachten wir uns, dass dies eine gute Zeit wäre, die Skripterstellung etwas abenteuerlicher zu gestalten und einen Blick auf die HTML-Anwendungen (HTAs) zu werfen. Und wenn wir abenteuerlich sagen, dann meinen wir das auch. Wir werden hier keinerlei Einführung geben. Wir gehen davon aus, dass Sie bereits wissen, was eine HTA ist und wie sie erstellt wird. Falls Sie damit nicht vertraut sind, empfehlen wir das HTA-Entwicklercenter im Skriptcenter. Vor allem die Lektüre der beiden Artikel im Abschnitt „HTAs für Anfänger“ ist sehr hilfreich. Danach haben Sie bestens aufgeholt und können hier wieder einsteigen.

In diesem Artikel wird das Erstellen von Dialogfeldern veranschaulicht. Das ist jedoch nicht alles. Wir zeigen außerdem, wie Informationen zwischen der Haupt-HTA und dem Dialogfeld ausgetauscht werden. Tja, die frische Frühlingsluft hat uns ehrgeizig gemacht. Mal sehen, wie lange es anhält.

Wie Sie wissen, gibt es zwei Arten von Dialogfeldern: modale und nicht-modale. Der Unterschied ist der: Wenn Sie ein modales Dialogfeld öffnen, können Sie erst zu dem Hauptfenster, in dem das Dialogfeld geöffnet wurde, zurückkehren, wenn Sie das Dialogfeld schließen. Wenn Sie ein nicht-modales Dialogfeld öffnen, können Sie zwischen den Fenstern hin- und herwechseln. Wenn Sie jedoch das Hauptfenster schließen, wird das nicht-modale Dialogfeld ebenfalls geschlossen.

Ein modales Dialogfeld wird genauso erstellt wie ein nicht-modales Dialogfeld. Der einzige Unterschied ist der, dass Sie beim Erstellen eines modalen Dialogfelds die ShowModalDialog-Funktion aufrufen, beim Erstellen eines nicht-modalen Dialogfelds dagegen die ShowModelessDialog-Funktion. Beide Funktionen nehmen die gleichen Parameter an. Im Folgenden wird zunächst eine einfache HTA betrachtet, von der ein modales Dialogfeld geöffnet wird (siehe Abbildung 1).

Figure 1 Einfaches Dialogfeld

<html> 
<head> 
<title>Modal Example</title>
<HTA:APPLICATION 
  APPLICATIONNAME=”MainModal”>
</head>

<script language=”VBScript”> 
Sub ShowDialog 
 intReturn = _
    ShowModalDialog(“modaldialog.hta”) 
 textbox.Value = intReturn
End Sub
</script> 

<body> 
<button onclick=”ShowDialog”>
 Show Dialog Box</button> <p>
<input type=”text” name=”textbox”>
</body> 
</html>

Hier wurde eine HTA namens „Modal Example“ erstellt. Im <body>-Bereich dieser HTA wurden zwei Elemente hinzugefügt: eine Schaltfläche mit dem Titel „Dialogfeld anzeigen“ und ein Textfeld mit dem Titel „Textfeld“ (siehe Abbildung 2). Wenn Sie auf die Schaltfläche klicken, wird die ShowDialog-Unterroutine ausgeführt.

Abbildung 2 Das eigentliche modale Dialogfeld der HTA

Abbildung 2** Das eigentliche modale Dialogfeld der HTA **

Die ShowDialog-Unterroutine ist ziemlich einfach. Wir rufen die ShowModalDialog-Funktion auf und übergeben den Namen der HTA-Datei, die als das modale Dialogfeld angezeigt werden soll, als Parameter, in diesem Fall modaldialog.hta. (Es wird davon ausgegangen, dass sich modaldialog.hta im selben Ordner wie diese HTA befindet. Wenn dies nicht der Fall ist, muss hier der vollständige Dateipfad angegeben werden.)

Wir rufen außerdem einen Rückgabewert (int­Return) von ShowModalDialog ab. Dieser Wert wird im Textfeld angezeigt. Sie werden sogleich sehen, wie der Rückgabewert abgerufen wird. Hier ist zu beachten, dass der Aufruf von ShowModalDialog nichts zurückgibt, bis das modale Dialogfeld geschlossen ist. Das heißt, dass der Rückgabewert dem Textfeld so lange nicht zugewiesen wird, bis das Dialogfeld geschlossen ist.

Werfen Sie als Nächstes einen Blick auf modaldialog.hta, das Dialogfeld, das durch unseren Aufruf an die HTA geöffnet wird (siehe Abbildung 3). In dieser HTA haben wir zwei Elemente erstellt: ein Listenfeld mit dem gleichnamigen Titel und die Schaltfläche „OK“ (siehe Abbildung 4). Dem Listenfeld wurden vier Elemente hinzugefügt, „Option 1“, „Option 2“ und so weiter, und den einzelnen Elementen wurden die entsprechenden Werte, 1 bis 4, zugewiesen. Wenn auf die Schaltfläche „OK“ geklickt wird, wird die CloseWindow-Unterroutine ausgeführt.

Figure 3 modaldialog.hta

<html> 
<head> 
<title>Modal Dialog Box</title>
<HTA:APPLICATION 
  APPLICATIONNAME=”ModalDialog”>
</head>

<script language=”VBScript”> 
Sub CloseWindow
  window.returnValue = listbox.Value
  window.Close 
End Sub
</script> 

<body> 
<select size=”3” name=”listbox”>
 <option value=”1”>Option 1</option>
 <option value=”2”>Option 2</option>
 <option value=”3”>Option 3</option>
 <option value=”4”>Option 4</option>
</select>
<p>
<input type=”button” id=”idBtn” value=”OK” onclick=”CloseWindow”> 
</body> 
</html>

Abbildung 4 HTA, die das modale Dialogfeld darstellt

Abbildung 4** HTA, die das modale Dialogfeld darstellt **

Die CloseWindow-Unterroutine ist ziemlich einfach. Als Erstes muss der Wert des Elements im ausgewählten Listenfeld gelesen und dann der Eigenschaft „window.returnValue“ zugewiesen werden. Wenn der Benutzer zum Beispiel Option 2 ausgewählt hat, würde window.returnValue der Wert 2 zugewiesen werden. Anschließend wird die window.Close-Methode aufgerufen, um das Dialogfeld zu schließen.

An dieser Stelle kehrt das Steuerelement zur Haupt-HTA zurück. Erinnern Sie sich an unseren Aufruf von ShowModalDialog:

intReturn = _
  ShowModalDialog(“modaldialog.hta”) 

Der Rückgabewert, der intReturn zugewiesen wird, ist der Wert, den wir im HTA-Dialogfeld window.returnValue zugewiesen haben. Wenn wir also im Dialogfeld Option 2 auswählen, wodurch window.returnValue der Wert 2 zugewiesen wird, wird intReturn gleich 2, und die folgende Codezeile zeigt diesen Wert dem Textfeld an:

textbox.Value = intReturn

Nachdem nun klar ist, wie Sie einen Wert von einem Dialogfeld abrufen, wird als Nächstes untersucht, wie einem Dialogfeld ein Wert übergeben wird. Diesmal soll ein nicht-modales Dialogfeld verwendet werden (siehe Abbildung 5). Denken Sie jedoch daran, dass die Funktionsweise von modalen und nicht-modalen Dialogfeldern gleich ist, sodass dieser Vorgang auch für ein modales Dialogfeld gilt.

Figure 5 Nicht-modal

<html>
<head>
<title>Modeless Example</title>
<HTA:APPLICATION 
  APPLICATIONNAME=”ModelessMain”>
</head>

<script language=”VBScript”>
Sub ShowDialog
  intReturn = _
    window.ShowModelessDialog _
    (“modelessdialog.hta”, _
    lstServers.Value, _
    “dialogHeight:400px;dialogWidth:300px”)
End Sub
</script>

<body>
<select size=”1” name=”lstServers”>
 <option value=”server1”>Server1</option>
 <option value=”server2”>Server2</option>
 <option value=”server3”>Server3</option>
 <option value=”server4”>Server4</option>
</select>
<p>
<input type=”button” value=”Retrieve Processes” onclick=”ShowDialog”>
</body>
</html>

Abbildung 7 An ein nicht-modales Dialogfeld weitergeleitete Daten

Abbildung 7** An ein nicht-modales Dialogfeld weitergeleitete Daten **

Diesmal haben wir ein Dropdownlistenfeld mit dem Titel „IstServers“ erstellt (dass es sich um ein Dropdownlistenfeld handelt, erkennen Sie daran, dass die Größe gleich 1 ist). Außerdem ist eine Schaltfläche mit dem Titel „Vorgänge abrufen“ vorhanden. Wenn auf die Schaltfläche „OK“ geklickt wird, wird die ShowDialog-Unterroutine ausgeführt. Die ShowDialog-Unterroutine hat nur eine Zeile, der Aufruf der window.ShowModelessDialog-Funktion, wie im Folgenden dargestellt:

intReturn = _
  window.ShowModelessDialog _
  (“modelessdialog.hta”, _
  lstServers.Value, _
  “dialogHeight:400px;dialogWidth:300px”)

Der erste Parameter, den wir an diese Funktion weiterleiten, ist der Name der HTA, der im Dialogfeld ausgeführt werden soll, in diesem Fall modelessdialog.hta. Der zweite Parameter ist die Value-Eigenschaft des Listenfelds. Denken Sie daran, dass die Value-Eigenschaft den Wert der ausgewählten Option im Listenfeld enthält. Wenn der Benutzer im Listenfeld also Server2 ausgewählt hat, wäre der Wert server2. Dieser Parameter ist somit der Schlüssel dazu, wie wir dem Dialogfeld Informationen übergeben. (Wenn Sie mehrere Werte übergeben wollen, könnten Sie sie in diesem Parameter als ein Array oder eine Sammlung übergeben.)

Wir werden sogleich sehen, wie das Dialogfeld den Wert in diesem Parameter empfängt. Beachten Sie zunächst jedoch, dass wir einen dritten Parameter einfügen:

“dialogHeight:400px;dialogWidth:300px”

Dieser Parameter enthält eine Zeichenfolge, die die gewünschte Höhe und Breite des Dialogfelds angibt: In diesem Fall wurde eine Höhe von 400 Pixel (400 px) und eine Breite von 300 Pixel angegeben. Wie schon im modalen Beispiel veranschaulicht, kann diese Parameterangabe leer bleiben, und das Dialogfeld wird in der Standardgröße für den Computer angezeigt.

Als Nächstes soll modelessdialog.hta (in Abbildung 6) untersucht werden, um zu sehen, wie das Dialogfeld den erhaltenen Wert einliest.

Figure 6 modelessdialog.hta

<html>
<head>
<title>Modeless Dialog</title>
<HTA:APPLICATION 
  APPLICATIONNAME=”Processes”>
</head>

<script language=”VBScript”>
Sub window_onLoad
  strComputer = window.dialogArguments
  Set objWMIService = GetObject(“winmgmts:” _
    & “{impersonationLevel=impersonate}!\\” _
    & strComputer & “\root\cimv2”)
  Set colProcesses = objWMIService.ExecQuery   _
    (“Select * from Win32_Process”)

  strHTML = “<h1>” & strComputer & “</h1><p>”
  For Each objProcess in colProcesses
    strHTML = strHTML & objProcess.Name & _
       “<br>”
  Next

  DataArea.InnerHTML = strHTML
End Sub
</script>

<body>
<span id=”DataArea”></span>
</body>
</html>

In dieser HTA ist das einzige Element, das wir angegeben haben, ein Span-Tag, das den gesamten Bereich des Dialogfelds enthält. In unserem Skriptabschnitt wurde eine window_onLoad-Unterroutine definiert. Diese Unterroutine wird ausgeführt, sobald die HTA geöffnet wird (in diesem Fall durch den Aufruf von ShowModelessDialog). Sehen Sie sich die erste Zeile dieser Unterroutine an:

strComputer = window.dialogArguments

Wir weisen der Variablen strComputer den Inhalt der Eigenschaft window.dialogArguments zu. Es stellt sich die Frage, was sich in dieser Eigenschaft befindet. Korrekt, es handelt sich um den Wert, der beim Aufruf von ShowModelessDialog im zweiten Parameter übergeben wurde. Falls im Hauptfenster „Server2“ ausgewählt wurde, enthält strComputer jetzt den Wert „server2“.

Die restliche Unterroutine ruft einfach alle Prozesse von strComputer ab und zeigt sie im Spanbereich an. Die Ergebnisse dieses Vorgangs sind in Abbildung 7 dargestellt.

Erfreulicherweise haben Sie jetzt den ganzen Sommer Zeit, um sich mit HTA-Dialogfeldern zu amüsieren. Es sei denn, Sie leben auf der südlichen Halbkugel, wo der Winter vor der Tür steht. Dann könnte es schwierig werden, falls Ihnen Ihr Winter auch so viele Stromausfälle beschert wie uns der letzte hier.

Die Scripting Guys von Microsoft arbeiten für (und sind Angestellte von) Microsoft. 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.