I. Introduction▲
Le langage VBScript est un outil ancien mais présent sur toutes les versions de Windows, simple et facile à mettre en œuvre, notamment pour les tâches d’administration réseaux. Malheureusement, son interface utilisateur est indigente et réduite à deux fonctions MsgBox et InputBox, outre les fonctions disponibles sous Windows Script Host, mais qui ne sont pas plus évoluées sur un plan graphique.
Il existe essentiellement deux solutions pour pallier cette déficience :
- les feuilles HTA exploitant le moteur graphique d'Internet Explorer ;
- les contrôles ActiveX Automation spécialement dédiés.
La première est lourde à mettre en œuvre et la seconde impose, le plus souvent, l'inscription du composant dans la base de registre, ce qui n'est pas toujours possible.
VBSX (Vbs eXtended Inputbox) propose une troisième voie originale : à savoir la modification dynamique de la boîte de dialogue affichée par la fonction InputBox pour y ajouter différents contrôles qui enrichiront considérablement les possibilités de cette fonction native très fruste.
Le paramètre default de la fonction InputBox est exploité par cette extension pour ajouter ces contrôles qui peuvent être choisis parmi quinze types différents. Les données entrées par l’utilisateur sont ensuite disponibles, soit comme valeur de renvoi de la fonction (mode par défaut), soit dans le presse-papier.
Certains anti-virus proposent des options dites « d'analyse heuristique », et prétendent ainsi pouvoir identifier des menaces logicielles sur la seule foi de leur comportement. Cet argument, essentiellement marketing, est la cause de nombreux faux positifs. Avast notamment, peut interdire le lancement du script et déclencher une erreur « 0xc0000005 ». Il suffit d'autoriser spécifiquement le launcher Vbsx.exe pour pouvoir utiliser l'extension.
II. Historique▲
1.0 : version publique initiale.
- Suppression d’un bug du contrôle group ;
- Changement de méthode de transfert entre le launcher et l’extension ;
- Ajout de la définition du contrôle recevant le focus initial.
III. Installation▲
VBSX est fourni sous deux formes :
- un installateur vbsx_setup.exe qui permet d’associer VBSX à l’extension de fichier .vbsx pour faciliter l’exécution des scripts « étendus » ;
- une version portable vbsx.zip qui contient un fichier exemple : RunVbsx.bat pour exécuter le script « étendu » fourni.
Vbs eXtended InputBox est composé d’un launcher Vbsx.exe et d’une bibliothèque wshxbox.dll. Si l’installateur a été utilisé, tous les fichiers scripts portant l’extension .vbsx seront reconnus par VBSX.
Il est également possible d’exécuter le script en le définissant comme paramètre du launcher Vbsx.exe. Dans ce cas, l’extension du fichier script est libre y compris .vbs.
Des exemples de scripts sont fournis pour les deux formes d’installation.
Par exemple, le script XboxClip.vbsx tient en quelques lignes très simples :
' à lancer avec les options -clipboard -sepc#10 -sepp,
Option
explicit
Dim
title,defaut,rep
title =
"eXtended InputBox by omen999"
defaut =
CreateObject
(
"Scripting.FileSystemObject"
).OpenTextFile
(
"data.csv"
).ReadAll
rep =
InputBox
(
""
,title,defaut)
' -clipboard option
Msgbox
CreateObject
(
"htmlfile"
).parentWindow.clipboardData.getData
(
"Text"
)
Le résultat affiché par la fonction InputBox « étendue » :
VBS eXtended InputBox n’est compatible qu’avec la version 32bits de Windows Script Host et requiert Windows XP SP3 ou supérieur.
IV. Description▲
La fonction native InputBox présente la syntaxe suivante :
InputBox
(
prompt,[title,][default
,][xpos,][ypos][,helpfile,context,])
Pour activer VBSX, les paramètres attendus par celui-ci sont simplement ajoutés au paramètre default de la fonction. Si la syntaxe de ce paramètre n’est pas reconnue par l’extension, la fonction InputBox pourra devenir inutilisable.
Les quinze contrôles reconnus par VBSX sont :
- dlg (dialogue) ;
- edit (texte) ;
- edpsw (mot de passe) ;
- cbox (liste déroulante éditable) ;
- clbox (liste déroulante non éditable) ;
- lbox (liste) ;
- ckbox (case à cocher) ;
- rdbox (bouton radio) ;
- frame (cadre) ;
- label (légende) ;
- ipctrl (adresse IP4) ;
- hotkey (raccourci) ;
- datepick (calendrier) ;
- group (groupe) ;
- img (image).
Deux exemples du fonctionnement de VBSX sont fournis sous la forme de fichiers scripts :
- Xbox.vbsx affiche une boîte de dialogue complète avec des valeurs initiales définies dans le script . Après validation, la chaîne renvoyée par InpuBox est affichée ;
- XboxClip.vbsx est accompagné du fichier data.csv et doit être lancé avec le fichier RunXboxClip.bat qui contient les bonnes options de ligne de commande. Les données initiales sont alimentées par le fichier data.csv et les données finales sont retournées par le presse-papier et affichées.
V. Référence▲
V-A. Options de la ligne de commande▲
Syntaxe de la ligne de commande :
vbsx.exe
<
fichierscript>
[-
clip[board]] [-
sepcC] [-
seppP] [-
noth[eme]] [-
sizeNN]
- fichierscript : nom complet du fichier script, le chemin d’accès n’a pas à être précisé si le script est situé dans le répertoire de vbsx.exe ;
- -clipboard (-clip) : les données entrées par l’utilisateur seront placées dans le presse-papier - sauf usage du bouton "annuler" ou "esc" - au lieu d’être renvoyées par la fonction. InpuBox renverra alors la valeur prévue par la documentation VBScript. Dans tous les cas, ces données seront concaténées dans le même ordre que celui du paramètre default et avec le même séparateur ;
- -notheme (-noth) : les contrôles conserveront leur aspect natif au lieu du thème actif de la version de Windows ;
- -sizeNN : définit la taille NN de la police entre 8 et 18 points (par défaut 13) ;
- -sepcC : définit un séparateur de contrôles C au lieu du caractère par défaut « | » ;
- -seppP : définit un séparateur de paramètres P au lieu du caractère par défaut « ~ ».
Ces deux dernières options facilitent l’import/export des données au moyen d’un fichier csv au format UNIX.
La ligne de commande n’est pas sensible à la casse et l’ordre des options est indifférent ; des paramètres propres au script peuvent être ajoutés à la ligne de commande.
V-B. Syntaxe des contrôles▲
Le paramètre default reçoit, sous la forme d’une chaîne de caractères, les différents paramètres des contrôles destinés à enrichir la boîte de dialogue InputBox. Chaque contrôle est séparé des autres par un caractère qui est par défaut « | » ou chr(124). De même, chaque paramètre du contrôle est séparé des autres par un caractère qui est par défaut « ~ » ou chr(126).
L’ordre dans lequel les contrôles sont concaténés définira le rang de tabulation de ceux-ci.
Syntaxe générale d’un contrôle :
type
~xl~xt~xh~xw[~init]
- type : code du contrôle à choisir dans la liste suivante : {dlg, edit, edpsw, cbox, clbox, lbox, ckbox, rdbox, frame, label, ipctrl, hotkey, datepick, group}.
Le type dlg ne correspond pas à un contrôle à proprement parler mais désigne la boîte de dialogue. Sa définition est obligatoire si vous souhaitez modifier les dimensions de celle-ci pour l’adapter à vos contrôles. Notez que ce dialogue comportera toujours un cadre occupant son angle haut et droit qui contiendra les boutons originaux de la fonction ainsi que l’icône de VBS eXtended et une mention de version ; - xl, xt, xh, xw : respectivement, coordonnées du point gauche et haut par rapport aux bords du dialogue (ou de l’écran pour dlg), hauteur et largeur du contrôle. Une valeur négative de (xl, xt) pour dlg entraîne le centrage automatique du dialogue ;
- init : données d’initialisation du contrôle. Pour les contrôles {edit, edpsw, label, ipctrl, hotkey et group} il s’agira d’une chaîne de caractères sans
séparateur, toutefois init devra respecter le format propre aux contrôles {ipctrl, hotkey, edpsw, img}, soit respectivement le format
xxx.xxx.xxx.xxx, la syntaxe SendKeys, un nombre maximum de caractères et un nom complet de fichier image.
Note : un contrôle label ou img sans données init n’a pas de sens.
Pour les contrôles {cbox, clbox, lbox, ckbox, rdbox, datepick}, init peut comporter des paramètres secondaires séparés par le caractère « # » ou chr(35) selon les modalités suivantes :
cbox, clbox, lbox : liste des items séparés par « # » ;
ckbox, rdbox : label#[0|1] où 0 = non sélectionné, 1 = sélectionné ;
datepick : jj/mm/[aa]aa#[0|1] où 0 = avec calendrier, 1 = sans calendrier ; - (v1.1) : le contrôle dlg accepte une valeur entière supérieure à -1 qui désigne l’index du contrôle qui recevra le focus initial à l’ouverture de la boîte de dialogue. L’index est défini par l’ordre des contrôles dans la chaîne de caractères. Une valeur erronée sera ignorée.
Valeur retournée :
la fonction InputBox renvoie une chaîne qui est composée de la valeur finale des contrôles dans l’ordre d’entrée du paramètre default, séparée par le caractère « | » ou celui redéfini par l’option -sepc. Pour les contrôles {clbox, lbox}, la valeur finale est l’index de l’item sélectionné et pour les contrôles {ckbox, rdbox}
leur état final. {dlg, label, frame et group} ne renvoient pas de données et sont ignorés.
Si l’option -clip est active, le résultat sera placé dans le presse-papier.
VI. Liens et téléchargements▲
L'installateur peut être téléchargé ici : vbsx_setup.exe.
L'archive pour le mode portable ici : vbsx.zip.
Vous pouvez également poser vos questions et laisser vos commentaires et suggestions sur le forum ici : forum Developpez.
VII. Remerciements▲
Je tiens à remercier jacques_jean pour sa relecture attentive et ses observations.