Donner une interface à vos script VBS , HTA : Html Application
Date de publication : 23 mars 2009 , Date de mise à jour : 21 mai 2009
Par
bbil (page à bbil)
La question sur la manière de donner une interface au script VBS revient souvent sur le forum ..
Le HTA (Html Application) est l'une des solutions.
Cet article va vous aider à débuter avec hta.
2 commentaires
I. C'est quoi le HTA ?
I-A. Présentation
I-B. Exécution d'une application HTA
I-C. Sécurité
I-D. L'application "bonjour tout le monde"
Télécharger l'application 'Bonjour tout le monde'
II. Le Tag HTA:APPLICATION
III. Mettez des contrôles dans vos applications
III-A. Ajout d'un bouton
Télécharger les 'applications Bouton'
III-B. Un champ de saisie (textbox)
III-C. Boutons radio
III-D. Les Checkbox
III-E. Liste de choix (donnés fixes)
III-F. Liste de choix de données dynamique
III-G. Zone de saisie texte multilignes
III-H. Sélection d'un fichier
III-I. Télécharger l'application 'Controles'
III-J. Utiliser un timer
Télécharger l'application Timer
IV. Travailler sur les fichiers
IV-A. Introduction au FileSystemObject dans un HTA
IV-B. Un exemple d'utilisation
Télécharger l'application ScriptingRuntime
V. Accéder à la base de registre
V-A. Introduction : la base de registre en VBS
V-B. Un exemple d'utilisation
Télécharger l'application Accés au registre
VI. Utiliser WMI
VI-A. Introduction WMI
VI-B. Exemple d'utilisation
Télécharger l'application exemple WMI
VII. Utiliser un ActiveX et Appel à une "sous-vue" modale
VII-A. Introduction
VII-B. Exemple d'utilisation
La fenêtre principale
La "Sous-vue"
Télécharger l'application exemple Appel "Sous-Vue" & ActiveX
VIII. Mise en forme application
VIII-A. Introduction
VIII-B. Taille de l'application
VIII-C. Couleur de fond
VIII-D. Ligne horizontale
VIII-E. Un cadre
Télécharger l'application exemple Mise en forme
IX. Conclusions
IX-A. Vos créations
IX-B. Vos commentaires
IX-C. Remerciements
I. C'est quoi le HTA ?
I-A. Présentation
Une Application HTA est constituée d'un fichier texte, avec une extension .HTA. Sa structure est similaire à une page html standard, avec en supplément un tag HTA application :
<HTML>
<HEAD>
<TITLE>Structure d'une application HTA</TITLE>
<HTA:APPLICATION ID = 'AppBase'>
</HEAD>
<BODY>
Une application HTA de BASE
</BODY>
</HTML>
|
I-B. Exécution d'une application HTA
Les applications HTA sont disponibles sous Windows depuis l'arrivée d'Internet Explorer 4. Les fichiers avec l'extension .HTA sont associés à "Microsoft (R) HTML Application host", mshta.exe.
Ils sont donc exécutables par un simple double-clic sur le fichier .HTA considéré.
I-C. Sécurité
Les Sécurités appliquées aux applications HTA sont un peu différentes de celles appliquées aux pages HTML. Ainsi, une application HTA a accès au système de fichiers (FileSystemObject) , à la base de registre, ainsi que à la technologie WMI.
I-D. L'application "bonjour tout le monde"
Pour ne pas échapper à la tradition de la première application "Hello World", voici un exemple de code,
qui permet aussi de voir l'emplacement du code VBScript dans l'entête du fichier.
<HTML>
<HEAD>
<TITLE>Application : Bonjour tout le monde</TITLE>
<HTA:APPLICATION ID =
<script language="VBScript">
Sub Window_onLoad
msgbox "Bonjour tout le monde",vbExclamation ,"interface-hta"
End Sub
</script>
</HEAD>
<BODY>
B
</BODY>
</HTML>
|
L'action événementielle "Window_OnLoad" est exécutée au démarrage de l'application.

Application 'Bonjour tout le monde'
Télécharger l'application 'Bonjour tout le monde'
II. Le Tag HTA:APPLICATION
L'application hta est caractérisée grâce à un tag "HTA:APPLICATION" dont les attributs définissent l'apparence et le comportement.
Les propriétés de HTA:APPLICATION
 |
Je ne vais pas vous détailler ici l'utilisation de toutes ces propriétés. Je vous laisse les découvrir, sachant que les valeurs soulignées
sont les valeurs utilisées par défaut pour la propriété considérée.
|
III. Mettez des contrôles dans vos applications
L'ajout de contrôles dans vos applications .HTA, s'effectue de la même manière que pour les pages HTML.
III-A. Ajout d'un bouton
Pour lier le bouton au script associé on peut utiliser la propriété "onClick" du bouton.
<HEAD>
<TITLE>Un Bouton</TITLE>
<HTA:APPLICATION
APPLICATION="htaBouton"
>
</HEAD>
<script language="VBScript">
Sub tstBouton
MsgBox "Action sur le bouton",vbExclamation,"interface-hta"
End Sub
</SCRIPT>
<BODY>
<input type="button" value="Actionnez ce bouton" onClick="tstBouton">
</BODY>
|
Cependant, je préfère utiliser une autre façon pour lier le bouton au script, en créant un fonction événementielle associée au clic sur le bouton.
<head>
<title>Un 2
<HTA:APPLICATION
APPLICATION="htaBouton"
>
</head>
<script language="VBScript">
Sub tstBouton_OnClick
MsgBox "Action sur le bouton",vbExclamation,"interface-hta"
End Sub
</script>
<body>
<input type="button" value="Actionnez ce bouton" name="tstBouton">
</body>
|
Télécharger les 'applications Bouton'
III-B. Un champ de saisie (textbox)
Pour disposer d'un champ de saisie, inspirez-vous de ce code :
Saisir votre nom : <INPUT TYPE="text" NAME="txtNom" SIZE="20" MAXLENGTH="30" VALUE="bbil">
|
avec txtNom comme nom du contrôle, donnant ensuite au code VBScript l'accès à la valeur saisie grâce à sa propriété .value:
MsgBox "Votre Nom est : " & txtNom.value
|
Dans le cas de saisie de mot de passe, il est possible de rendre invisible les caractères saisis en modifiant le type de "text" à "password"
<INPUT TYPE="password" NAME="txtMotDePasse" TITLE="Saisir votre mot de passe" SIZE="20" MAXLENGTH="30" VALUE="">
|
 |
L'attribut TITLE permet de définir un Tooltiptext, chaîne de caractères qui apparaît dans la bulle d'information lorsque l'utilisateur passe le curseur de la souris sur le boutton.
|
III-C. Boutons radio
Le type radio permet de donner le choix entre plusieurs propositions (un seul choix possible) :
Votre couleur préférée : <BR>
<INPUT TYPE="radio" NAME="optCouleur" VALUE="Bleu" CHECKED>Bleu<BR>
<INPUT TYPE="radio" NAME="optCouleur" VALUE="Rouge">Rouge<BR>
<INPUT TYPE="radio" NAME="optCouleur" VALUE="Vert">Vert<BR>
<BR>
|
Ensuite l'on teste la propriété checked de chacun des éléments du groupe de case à cocher :
if optCouleur(0).Checked then msgbox "Couleur choisie : bleu"
if optCouleur(1).Checked then msgbox "Couleur choisie : Rouge"
if optCouleur(2).Checked then msgbox "Couleur choisie : Verte"
|
On peut aussi utiliser une bouche for, grâce à la propriété length qui renvoie le nombre de cases à option dans le groupe, et à la propriété value :
Dim stCouleur
Dim i
for i = 0 to optCouleur.length -1
if optCouleur(i).Checked then
stCouleur = optCouleur(i).value
exit for
end if
next
|
III-D. Les Checkbox
Les checkbox s'utilisent de la même manières que les radios bouton. La différence tient dans le fait que plusieurs cases peuvent être cochées simultanément.
Le code pour ajouter les chekbox à l'application :
<BR>
Vos moyens de transport préférés ? : <BR>
<INPUT TYPE="checkbox" NAME="chkTransport" VALUE="Vélo" CHECKED>Vélo<BR>
<INPUT TYPE="checkbox" NAME="chkTransport" VALUE="Voiture"CHECKED>Voiture<BR>
<INPUT TYPE="checkbox" NAME="chkTransport" VALUE="Marche">Marche a pied<BR>
<INPUT TYPE="checkbox" NAME="chkTransport" VALUE="train" >Train<BR>
<INPUT TYPE="checkbox" NAME="chkTransport" VALUE="bus">Bus
|
Pour la partie VBScript, on utilise le même principe que pour les radios boutons:
For i = 0 to chkTransport.length - 1
if chkTransport(i).checked then
stTransport = stTransport & chkTransport(i).value & ", "
end if
next
|
III-E. Liste de choix (donnés fixes)
<SELECT NAME="lstChaines" SIZE=4 onChange="ChoixChaine">
<OPTION VALUE="TF1">TF1
<OPTION VALUE="FR2">France 2
<OPTION VALUE="FR3" SELECTED>France 3
<OPTION VALUE="C+" >CANAL PLUS
</SELECT>
|
Le paramètre facultatif SIZE permet de définir le nombre d'éléments de la liste visibles simultanément.
La propriété : "MULTIPLE" permet d'autoriser les choix multiples dans la liste :
Sports pratiqués : <BR>
<SELECT NAME="lstSports" SIZE=4 MULTIPLE>
<OPTION VALUE="rugby">rugby
<OPTION VALUE="foot">foot
<OPTION VALUE="basket-ball" SELECTED>Basket
<OPTION VALUE="hand-ball" >Hand
</SELECT>
<BR><BR>
|
La propriété "Selected" permet d'extraire les éléments choisis de la liste
For i = 0 to lstSports.length - 1
if lstSports(i).Selected then
stSport = stSport & lstSports(i).value & " "
end if
next
|
III-F. Liste de choix de données dynamique
Les éléments compris dans la liste de choix peuvent être définis à l'ouverture de l'application
Dans la partie "Body" du HTA l'on place la déclaration de la liste :
<SELECT NAME="lstDyn">
</SELECT>
|
Puis cette liste peut être renseignée par exemple à l'ouverture de l'application :
Sub Window_Onload
For i = 1 to 10
Set oOption = Document.createElement("OPTION")
oOption.Text = "Opt" & i
oOption.Value = "Option " & i
lstDyn.Add(oOption)
next
end sub
|
III-G. Zone de saisie texte multilignes
TEXTAREA permet de définir une zone de saisie :
Vos commentaires <BR>
<TEXTAREA NAME="txtCommentaires" ROWS="3" COLS="40" >
</TEXTAREA>
|
Ses attributs facultatifs sont ROWS pour le nombre de lignes, COLS le nombre de colonnes.
Et READONLY pour un champ à afficher seulement.
L'attribut NAME est utilisé dans le code VBScript pour accéder aux données saisies:
Msgbox txtCommentaires.Value ,vbEclamation,"Vos commentaires"
|
III-H. Sélection d'un fichier
Le tag INPUT de type 'file' permet l'appel de la fenêtre de sélection d'un fichier :
<INPUT TYPE="file" NAME="inFichier" SIZE="30" onChange="choixfichier">
|
Sub ChoixFichier
msgbox inFichier.value
end sub
|
III-I. Télécharger l'application 'Controles'
III-J. Utiliser un timer
Il ne s'agit pas à proprement parler d'un contrôle, mais de la procédure SetInterval, qui permet de simuler le fonctionnement d'un timer tel qu'on le trouve dans VB6.
Initialisation du timer
MonTimer = window.setInterval ("MonScript", 500, "VBScript")
|
La variable "MonTimer" permet ensuite de Stopper le timer si nécessaire
window.ClearInterval MonTimer
|
Un exemple d'utilisation d'un timer :
<html>
<HEAD>
<TITLE>Application : Test d
<HTA:APPLICATION ID =
<script language="VBScript">
dim MonTimer
Sub Window_onLoad
tb1.width=1
StartTimer
End Sub
Sub StartTimer
bpTimer.setAttribute "disabled", true
bpStop.setAttribute "disabled", false
MonTimer = window.setInterval ("MonScript", 500, "VBScript")
End sub
sub MonScript
tb1.width = tb1.width+10
if tb1.Width > 600 then tb1.Width =1
End Sub
Sub bpStop_OnClick
bpTimer.setAttribute "disabled", false
bpStop.setAttribute "disabled", true
window.ClearInterval MonTimer
end sub
</script>
</HEAD>
<BODY>
</TABLE>
<TABLE id="tb1" bgColor=green
height=10 width=0
cellSpacing=0 cellPadding=0 border= 0>
<TR><TD></TD></TR>
</TABLE><BR>
<input type="button" value="Start Timer" name="bpTimer" OnClick="StartTimer" title="Relance le timer">
<input type="button" value="Stop Timer" name="bpStop" title="Met fin au timer">
</BODY>
</html>
|
Télécharger l'application Timer
IV. Travailler sur les fichiers
IV-A. Introduction au FileSystemObject dans un HTA
Les sécurités relatives au HTA vous permettent d'accéder à la bibliothèque "Scripting Runtime library". Une section de la FAQ VBScript lui est consacrée :
Fichiers : le FileSystemObject
IV-B. Un exemple d'utilisation
Le code suivant reprend l'exemple standard d'un mini-éditeur de texte :
<html>
<HEAD>
<TITLE>Application : accès au fichier</TITLE>
<HTA:APPLICATION ID = 'AppScripting'>
<script language="VBScript">
Sub ChoixFichier
Const ForReading = 1, ForWriting = 2
Dim oFso, f
Dim stFichier
stfichier = inFichier.value
Set oFso = CreateObject("Scripting.FileSystemObject")
if oFSO.FileExists(stfichier) then
Set f = oFso.OpenTextFile(stFichier, ForReading)
txtFichier.value = f.ReadALL
f.Close
else
msgbox "Fichier " & vbCrlf & stFichier & vbCrlf & "Inaccessible !",vbCritical,"interface-hta"
end if
set f = Nothing
set oFso = Nothing
end sub
'
' Sauvegarde du fichier texte
'
Sub btSauver_OnClick
Const ForReading = 1, ForWriting = 2
Dim oFso, f
Dim stFichier
stfichier = inFichier.value
Set oFso = CreateObject("Scripting.FileSystemObject")
Set f = oFso.OpenTextFile(stFichier, ForWriting)
f.write txtFichier.value
f.close
set f = Nothing
set oFso = Nothing
end sub
</script>
</HEAD>
<BODY>
<INPUT TYPE="file" NAME="inFichier" SIZE="60" onChange="choixfichier">
<input type="button" value="Sauver" name="btSauver" >
<BR>
<TEXTAREA NAME="txtFichier" ROWS="40" COLS="100" >
</TEXTAREA>
</BODY>
</html>
|

Télécharger l'application ScriptingRuntime
V. Accéder à la base de registre
V-A. Introduction : la base de registre en VBS
Les sécurités des applications HTA permettent l'accès à l'objet Wshell et ses trois méthodes destinées à la gestion de la base de registre :
- RegWrite : pour écrire dans la base de registre
- RegRead : pour lire une entrée de la base de registre
- RegDelete : pour effacer une clef ou sa valeur de la base de registre
V-B. Un exemple d'utilisation
<html>
<HEAD>
<TITLE>Application : accès au registre Windows</TITLE>
<HTA:APPLICATION ID =
<script language="VBScript">
Const CLEGTACHE="HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableTaskMgr"
Dim WshShell
Sub Window_onLoad
dim stDisable
stDisable = ""
Set WshShell = CreateObject("WScript.Shell")
On Error resume next
stDisable = WshShell.RegRead (CLEGTACHE)
On Error Goto 0
if stDisable = "" then optGtaches(0).Checked = true else optGTaches(1).checked = true
End Sub
Sub btValider_OnClick
dim stDisable
if optGtaches(0).Checked then stDisable ="" else stDisable="1"
WshShell.RegWrite CLEGTACHE,stDisable
end sub
</script>
</HEAD>
<BODY>
Gestionnaire de tâches : <BR>
<INPUT TYPE="radio" NAME="optGTaches" VALUE="Actif" >Actif<BR>
<INPUT TYPE="radio" NAME="optGTaches" VALUE="Inactif">Inactif<BR>
<input type="button" value="Envoi" name="btValider" >
</BODY>
</html>
|
Télécharger l'application Accés au registre
VI. Utiliser WMI
VI-A. Introduction WMI
VI-B. Exemple d'utilisation
Un exemple d'utilisation : Lister les partages d'un ordinateur :
<html><HEAD>
<TITLE>Application : Partages</TITLE>
<HTA:APPLICATION ID =
<script language="VBScript">
Sub Window_onLoad
Dim strObject
Dim colShares
Dim objWMIService, objShare
Set objWMIService = GetObject( "winmgmts:" )
Set colShares = objWMIService.ExecQuery( "Select * from Win32_Share" )
For Each objShare In colShares
Document.Write objShare.Name & " [" & objShare.Path & "]<BR/>"
Next
End Sub
</script>
</HEAD>
<BODY>
</BODY>
</html>
|
Télécharger l'application exemple WMI
VII. Utiliser un ActiveX et Appel à une "sous-vue" modale
VII-A. Introduction
Pour utiliser un activeX dans une page HTML (ou HTA), on a besoin de son CLSID. Celui du contrôle MonthView utilisé est : 232E456A-87C3-11D1-8BE3-0000F8754DA1
Le code d'affichage du contrôle Monthview devient :
<OBJECT
classid="clsid:232E456A-87C3-11D1-8BE3-0000F8754DA1"
id=cntMonthView
align=left
hspace=10
vspace=0
>
</object>
|
Il existe plusieurs méthodes pour trouver le ClassID de l'objet. Pour ma par j'utilise
COMView .
L'id (ici cntMonthView) permet d'accéder aux propriétés et méthodes de l'instance de l'objet créé sur la vue.
Appel d'une "sous-vue": Pour afficher une boite de dialogue modale, on utilise la fonction
ShowModalDialog qui prend pour paramètres :
La propriété returnValue permet le transfert de résultat de la sous-vue modale à la vue principale.
window.returnValue = cntMonthView.Value
|
VII-B. Exemple d'utilisation
La fenêtre principale
<HTML>
<head>
<title>Appel sous vue</title>
<HTA:APPLICATION
APPLICATION="htaAppSousVue"
>
</head>
<script language="VBScript">
Sub txtDate_OnClick
dim maDate
maDate = ShowModalDialog("SousVue.hta",txtDate.Value, "dialogWidth=245px; dialogHeight=310px")
if maDate > 0 then
txtDate.value =maDate
end if
End Sub
</script>
<body>
Saisir Date: <INPUT TYPE="text" NAME="txtDate" SIZE="20" MAXLENGTH="30" VALUE="12/10/2009"><BR>
</body>
</HTML>
|
La "Sous-vue"
<html>
<HEAD>
<TITLE>Saisie date</TITLE>
<HTA:APPLICATION ID = 'AppDate'
APPLICATIONNAME="SaisieDate"
MAXIMIZEBUTTON="no"
MINIMIZEBUTTON="no"
CONTEXTMENU="no"
SYSMENU="no"
SCROLL="no"
>
<script language="VBScript">
Sub Window_onLoad
DateInitiale = window.dialogArguments
cntMonthView.value = DateInitiale
window.resizeTo 245,310
End Sub
Sub cntMonthView_DateClick(ByVal DateClicked )
' msgbox DateClicked
end sub
'
' Sortie par bouton validez
'
Sub btValid_OnClick
window.returnValue = cntMonthView.Value
window.Close
end sub
'
' Sortie par bouton annulez
'
Sub btAnnule_OnClick
window.returnValue = -1
window.Close
end sub
</script>
</HEAD>
<BODY>
<OBJECT
classid="clsid:232E456A-87C3-11D1-8BE3-0000F8754DA1"
id=cntMonthView
align=left
hspace=10
vspace=0
>
</object>
<input type="button" value="Validez" name="btValid" STYLE="position: absolute; top: 240px; left: 10px; width : 100px;" >
<input type="button" value="Annulez" name="btAnnule" STYLE="position: absolute; top: 240px; left: 125px; width : 100px;" >
</BODY>
</html>
|

Télécharger l'application exemple Appel "Sous-Vue" & ActiveX
VIII. Mise en forme application
VIII-A. Introduction
Pour la mise en forme d'une application HTA, l'on retrouve les mêmes fonctions que pour des pages HTML standard. Je vous conseille donc en cas de "manque" pour réviser/améliorer vos connaissances sur le HTML et les feuilles de styles .Css.
la consultation d'articles sur le HTML et le CSS.
tutoriels et cours (X)HTML
Tutoriels CSS
Dans cette section, je présenterai seulement un échantillon des possibilités de mise en forme.
VIII-B. Taille de l'application
La taille et la position de l'application peuvent être définies par un appel aux procédures window.moveTo et window.resizeTo
Sub Window_onLoad
window.moveTo(0,0);
window.resizeTo(400,200)
End Sub
|
VIII-C. Couleur de fond
La balise BODY, grâce à ses attributs,permet de modifier l'aspect général de l'application:
VIII-D. Ligne horizontale
La balise <"HR"> permet l'ajout d'un trait horizontal de séparation à la form.
VIII-E. Un cadre
Un cadre similaire à ce que l'on trouve dans les boîtes de dialogues standard avec la balise "fieldset"
<fieldset>
<legend>Un Cadre :</legend>
<input type="button" value="Actionnez ce bouton" name="btAction" title="Affiche un messagebox"><BR>
</fieldset>
|
Télécharger l'application exemple Mise en forme
IX. Conclusions
IX-A. Vos créations
Si le coeur vous en dit à vous de jouer, proposez vos créations dans le forum
Vos Contributions VBScript , les meilleurs Scripts ( VBSCript ou HTA ...) pourront constituer la base d'une nouvelle page source VBSCript.
IX-B. Vos commentaires
J'ai ouvert une discussion, sur le forum :
2 commentaires
où vous pouvez laisser vos commentaires.
IX-C. Remerciements


Copyright © 2009 Philippe Baquer. Aucune reproduction, même partielle, ne peut être faite
de ce site et de l'ensemble de son contenu : textes, documents, images, etc.
sans l'autorisation expresse de l'auteur.
Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 €
de dommages et intérêts.
Cette page est déposée.