Hé, vous le scripteur !Les fleurs éclosent. Les dialogues surgissent. C’est le printemps.

Les scripteurs Microsoft

Ah, c’est le printemps. Et ça nous rend heureux. Après avoir vu cet hiver des records de précipitations, de pluies verglaçantes, de tempêtes de neige et de vents violents (l’une de ces tempêtes provoquant notamment la chute d’un gros arbre dans l’arrière-cour de l’un des scripteurs à quelques centimètres seulement de sa maison), le printemps est enfin arrivé et nous avons actuellement une petite pluie fraîche avant l’arrivée de la pluie plus chaude du nord-ouest pacifique cet été.

Pendant que nous observons cette petite bruine, nous avons pensé que c’était le moment idéal pour faire preuve d’un peu d’audace dans nos scripts et nous pencher sur des applications HTML (HTA). Et nous prenons ici le mot « audace » au sens fort. Nous n’allons faire aucune présentation, nous allons supposer que vous savez déjà ce qu’est une HTA et comment en créer une. Dans le cas contraire, consultez le Centre des développeurs HTA sur le Script Center. Lisez notamment les deux articles de la section HTA pour débutants. Cela fait, vous serez tous à niveau et prêts à reprendre ici.

Dans cette rubrique nous vous montrerons comment créer des boîtes de dialogue. Nous vous montrerons également comment transférer des informations entre la HTA principale et la boîte de dialogue. Oui, ce petit air printanier nous a rendus vraiment audacieux, n’est-ce pas ? Profitez-en avant qu’il ne soit trop tard.

Comme vous le savez peut-être, il y a deux genres de boîtes de dialogue : modales et non modales. La différence est que, lorsque vous ouvrez une boîte de dialogue modale, vous ne pouvez pas retourner à la fenêtre principale à partir de laquelle la boîte de dialogue a été ouverte tant que vous ne fermez pas la boîte de dialogue. Lorsque vous ouvrez une boîte de dialogue non modale, vous pouvez passer d’une fenêtre à l’autre. Cependant, si vous fermez la fenêtre principale, votre boîte de dialogue non modale se fermera également.

La création d’une boîte de dialogue modale fonctionne exactement de la même façon que la création d’une boîte de dialogue non modale. La seule différence est que, pour créer une boîte de dialogue modale, vous appelez la fonction ShowModalDialog et, pour créer une boîte de dialogue non modale, vous appelez la fonction ShowModelessDialog. Les deux fonctions acceptent les mêmes paramètres. Commençons par étudier une HTA simple qui ouvre une boîte de dialogue modale (voir la figure 1).

Figure 1 Boîte de dialogue de démarrage simple

<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>

Ici, nous avons créé une HTA intitulée Modal Example. Dans le <corps> de notre HTA, nous avons ajouté deux éléments : un bouton intitulé Afficher la boîte de dialogue et une zone de texte intitulée textbox (vous pouvez les voir tous les deux à la figure 2). Lorsque vous cliquez sur le bouton, la sous-routine ShowDialog s’exécute.

Figure 2 Boîte de dialogue HTA modale

Figure 2** Boîte de dialogue HTA modale **

La sous-routine ShowDialog est assez simple. Nous appelons la fonction ShowModalDialog, en faisant passer le nom du fichier HTA que nous souhaitons afficher en tant que boîte de dialogue modale comme paramètre, dans ce cas modaldialog.hta. (Nous supposons que modaldialog.hta se trouve dans le même dossier que cette HTA. Si ce n’est pas le cas, vous devrez inclure le chemin d’accès complet du fichier complet ici.)

Nous capturons également une valeur de retour (intReturn) dans ShowModalDialog. Nous affichons cette valeur dans la zone de texte. Vous verrez dans un moment comment nous obtenons cette valeur de retour. Il est important de noter que l’appel de ShowModalDialog ne reviendra pas tant que la boîte de dialogue modale n’est pas fermée. Ceci signifie que la valeur de retour ne sera pas attribuée à la zone de texte jusqu’a ce que la boîte de dialogue ait été fermée.

Observons à présent modaldialog.hta, la boîte de dialogue que notre HTA appelante ouvre (voir la figure 3). Dans cette HTA, nous avons créé deux éléments : une zone de liste intitulée listbox et un bouton intitulé OK, comme illustré à la figure 4. Nous avons ajouté quatre éléments dans la zone de liste intitulés Option 1, Option 2, et ainsi de suite, et avons attribué des valeurs correspondantes, de 1 à 4, à chacun de ces éléments. Lorsque vous cliquez sur le bouton OK, la sous-routine CloseWindow s’exécute.

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>

Figure 4 HTA représentant la boîte de dialogue modale

Figure 4** HTA représentant la boîte de dialogue modale **

La sous-routine CloseWindow est assez simple. Nous commençons par lire la valeur de l’élément dans la zone de liste qui a été sélectionnée et nous attribuons cette valeur à la propriété window.returnValue. Par exemple, si l’utilisateur a choisi l’Option 2, la valeur 2 sera attribuée à window.returnValue. Nous appelons ensuite la méthode window.Close pour fermer la boîte de dialogue.

À ce stade, le contrôle revient à la HTA principale. Rappelez-vous notre appel de ShowModalDialog :

intReturn = _
  ShowModalDialog(“modaldialog.hta”) 

La valeur de retour attribuée à intReturn est la valeur que nous avons attribuée à window.returnValue dans notre HTA de boîte de dialogue. Donc, si nous choisissons l’Option 2 dans la boîte de dialogue, qui attribue la valeur 2 à window.returnValue, intReturn sera égal à 2 et la ligne de code suivante affiche cette valeur dans la zone de texte :

textbox.Value = intReturn

Maintenant que nous avons vu comment obtenir une valeur à partir d’une boîte de dialogue, voyons comment nous obtiendrions une valeur dans une boîte de dialogue. Cette fois, nous allons utiliser une boîte de dialogue non modale (voir la figure 5), mais souvenez-vous que les boîtes de dialogue modales et non modales fonctionnent de la même façon, donc ce processus fonctionnera aussi avec une boîte de dialogue modale.

Figure 5 En non 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>

Figure 7 Données transférées dans une boîte de dialogue non modale

Figure 7** Données transférées dans une boîte de dialogue non modale **

Cette fois, nous avons créé une liste déroulante appelée lstServers (on voit qu’il s’agit d’une liste déroulante car la taille est égale à 1). Il y a également un bouton intitulé Récupérer les processus. Lorsque vous cliquez sur le bouton, la sous-routine ShowDialog s’exécute. La sous-routine ShowDialog n’a qu’une ligne, l’appel à la fonction window.ShowModelessDialog, comme illustré ici :

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

Le premier paramètre que nous transférons vers cette fonction est le nom de la HTA que nous souhaitons exécuter dans la boîte de dialogue, dans ce cas modelessdialog.hta. Le deuxième paramètre est la propriété Value de notre zone de liste. Rappelez-vous : la propriété Value contient la valeur de l’option sélectionnée dans la zone de liste. Donc, si l’utilisateur a sélectionné Server2 dans la zone de liste, la valeur sera server2. Ce paramètre définit la façon dont les informations sont transférées dans la boîte de dialogue. (Si vous souhaitez transférer plusieurs valeurs, vous pourriez les transférer dans ce paramètre sous la forme d’un tableau, voire d’une collection).

Nous verrons dans un moment comment la boîte de dialogue reçoit la valeur dans ce paramètre. Mais je souhaite d’abord attirer votre attention sur le troisième paramètre que nous avons ajouté :

“dialogHeight:400px;dialogWidth:300px”

Ce paramètre contient une chaîne qui spécifie la hauteur et la largeur de notre choix pour notre boîte de dialogue. Dans ce cas, nous avons spécifié une hauteur de 400 pixels (400px) et une largeur de 300 pixels. Comme nous l’avons vu dans notre Modal Example, nous pouvons laisser ce paramètre vierge et la boîte de dialogue sera affichée dans la taille par défaut de l’ordinateur.

À présent, si vous examinez modelessdialog.hta (à la figure 6), vous verrez que la boîte de dialogue lit la valeur qui lui est transférée.

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>

Dans cette HTA, le seul élément que nous avons spécifié est une étendue, qui contient l’ensemble de la zone de la boîte de dialogue. Dans notre section de script, nous avons défini une sous-routine window_onLoad. Cette sous-routine s’exécutera dès l’ouverture de la HTA (dans ce cas, en appelant ShowModelessDialog). Observez la première ligne de cette sous-routine :

strComputer = window.dialogArguments

Nous attribuons à la variable strComputer le contenu de la propriété window.dialogArguments. Et que renferme cette propriété, d’après vous ? Vous voyez, il faut vous réveiller aussi avec le printemps. C’est cela, il s’agit de la valeur transférée dans le second paramètre de l’appel de ShowModelessDialog. Si Server2 a été sélectionné dans la fenêtre principale, strComputer contient maintenant la valeur server2.

Le reste de la sous-routine récupère simplement tous les processus dans strComputer et les affiche dans la zone d’étendue. Vous pouvez voir les résultats de cette opération à la figure 7.

Heureusement, vous allez pouvoir vous amuser avec les boîtes de dialogue HTA pendant tout l’été. À moins, bien sûr, que vous ne viviez dans l’hémisphère sud, auquel cas l’hiver s’annonce et vous risquez d’avoir des difficultés si vous vous retrouvez avec autant de pannes de courant pendant votre hiver que nous avons eues pendant le nôtre.

Les scripteurs Microsofttravaillent pour (enfin, sont employés par) Microsoft. Lorsqu’ils ne sont pas en train de jouer au base-ball, d’entraîner une équipe ou de regarder un match (ou de se livrer à de multiples autres activités), ils dirigent le Script Center TechNet. Vous pouvez le vérifier vous-même sur www.scriptingguys.com.

© 2008 Microsoft Corporation et CMP Media, LLC. Tous droits réservés. Toute reproduction, totale ou partielle, est interdite sans autorisation préalable.