Présentation d'une extension personnalisée enrichie de la fonction InputBox de VBScript : Vbs eXtended InputBox
Un tutoriel de Omen
Le 2019-02-22 09:55:38, par omen999, Rédacteur
bonjour,
plus de 12 ans après mes premières propositions pour améliorer la fonction InputBox
j'ai finalement écrit une version définitive compatible avec toutes les versions de XP SP3 et supérieures.
en quelques lignes, InputBox peut ressembler à ça :
au lieu de :
note : les utilisateurs d'Avast avec la protection "heuristique" activée devront autoriser spécifiquement le lancement de vbsx.exe
plus de 12 ans
j'ai finalement écrit une version définitive compatible avec toutes les versions de XP SP3 et supérieures.
en quelques lignes, InputBox peut ressembler à ça :
au lieu de :
note : les utilisateurs d'Avast avec la protection "heuristique"
-
omen999Rédacteurbonjour,
extrait de la doc :
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.
seuls les ctrls edit renvoient une valeur et ces valeurs sont séparées par le caractère |
pour les extraire, la fonction Split() est parfaitement adaptéeCode : 1
2
3
4
5
6
7
8Option explicit Dim title,defaut,rep,data title="eXtended InputBox by omen999" defaut="dlg~-1~-1~400~300~2|label~10~20~70~19~Libellé n°1 :|edit~86~17~160~21~contenu initial n°1|label~10~46~70~19~Libellé n°2 :|edit~86~43~160~21~contenu initial n°2" rep=InputBox("",title,defaut) Msgbox rep ' la valeur brute renvoyée par InputBox data = Split(rep,"|") If UBound(data) > 0 then Msgbox data(0) & vbCrLf & data(1) ' les valeurs séparées de chaque ctrl edit
le 08/07/2019 à 17:59 -
omen999Rédacteuren gros, tu voudrais bien un exemple tout fait...
le script test.vbsx :
Code : 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20Option explicit Dim title,res(9),rep,params title="eXtended InputBox by omen999" res(0) = "dlg~-1~-1~650~290~3" res(1) = "img~10~15~220~220~omen220.ico" res(2) = "label~260~15~60~19~Adresse IP :" res(3) = "ipctrl~366~10~120~19~0.0.0.0" res(4) = "label~260~40~102~19~Nom de l'imprimante :" res(5) = "edit~366~36~160~19" res(6) = "label~260~66~80~19~Type de pilote :" res(7) = "clbox~366~60~110~40~bourré#incontinent#caractériel#dépressif#12345678" res(8) = "label~260~92~74~19~Configuration :" res(9) = "clbox~366~86~110~40~configuration n°1#configuration n°2#configuration n°3" rep=InputBox("",title,Join(res,"|")) msgbox rep params = Split(rep,"|") ' un espace dans un paramètre sera interprété comme un séparateur If UBound(params) > -1 Then CreateObject("WScript.Shell").Run "test.bat " & params(0) & " " & params(1) & " " & params(2) & " " & params(3)
Code bat : 1
2
3@echo off for %%a in (%1 %2 %3 %4) do echo %%a pause
le logo : [ATTACH]491164d1/a/a/a" />
et le résultat (tu peux garder le logo...): le 15/07/2019 à 15:18 -
omen999Rédacteuret désoler si vous avez pensé que je veux un script tout fait ce n'était pas ça,
d'ailleurs tu ferais mieux d'essayer de personnaliser mon dernier exemple plutôt que celui de l'article
de plus, tu t'embarques dans des trucs bien compliqués pour simplement transmettre 4 paramètres
à ton script powershell
les variables d'environnement peuvent être directement définis dans le VBS sans passer par un batch
exemple :Code : 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27Option explicit Dim title,res(9),rep,params,shl,cvol title="eXtended InputBox by omen999" res(0) = "dlg~-1~-1~650~290~3" res(1) = "img~10~15~220~220~omen220.ico" res(2) = "label~260~15~60~19~Adresse IP :" res(3) = "ipctrl~366~10~120~19~0.0.0.0" res(4) = "label~260~40~102~19~Nom de l'imprimante :" res(5) = "edit~366~36~160~19" res(6) = "label~260~66~80~19~Type de pilote :" res(7) = "clbox~366~60~110~40~bourré#incontinent#caractériel#dépressif#12345678" res(8) = "label~260~92~74~19~Configuration :" res(9) = "clbox~366~86~110~40~configuration n°1#configuration n°2#configuration n°3" rep=InputBox("",title,Join(res,"|")) msgbox rep params = Split(rep,"|") If UBound(params) > -1 Then Set shl = CreateObject("WScript.Shell") Set cvol = shl.Environment("VOLATILE") cvol("IP") = params(0) cvol("NOM") = params(1) cvol("drivers") = params(2) cvol("config") = params(3) shl.Run "PowerShell -NoProfile -ExecutionPolicy Bypass -Command nbrecto.ps1", 1, True End If
le 16/07/2019 à 15:54 -
omen999Rédacteur(et je n'ai pas trouvé où créer un nouveau fil...)
j'ai horreur des programmes d'installation qui écrivent un peu partout
dans la bdr et pas toujours utilement
mais j'ai peut-être été un peu restrictif sur ce coup car on peut effectivement
attendre d'une installation qu'elle mette à jour la variable d'environnement
j'ai modifié le vbsx_setup.exe en ce sens et il est à télécharger sur le lien de l'article
note : l'installation peut se faire sans inconvénient sur une config déjà installéele 18/03/2019 à 16:12 -
omen999Rédacteurnote : peut-être qu'un indication sur le path à modifier pourrait aussi être une option ?
il sera demandé à l'utilisateur s'il souhaite mettre à jour la variable d'environnement Path
donc mise à jour du vbsx_setup.exe à télécharger dans le lien de l'articlele 19/03/2019 à 14:08 -
omen999RédacteurAh oui, je n'avais pas jugé utile dans mon exemple XBoxClip.vbsx de gérer le cas où le presse-papiers est vide
dans ce cas de figure, la méthode getData renvoie une valeur de type vbNull qui n'est pas acceptée par la fonction MsgBox
on peut remplacer la dernière ligne de cet exemple par :
Code : 1
2
3Dim sclip sclip = CreateObject("htmlfile").parentWindow.clipboardData.getData("Text") If IsNull(sclip) Then MsgBox "le presse-papiers est vide" Else MsgBox sclip
le 04/02/2022 à 14:57 -
ProgElecTExpert éminent séniorSalut omen999
Dans la page article, en fin d'article, le lien qui je pense devrait aboutir dans cette discussion n'est pas bon (Page not found):
Vous pouvez également poser vos questions et laisser vos commentaires et suggestions sur le forum ici : forum Developpez.le 22/02/2019 à 22:39 -
omen999Rédacteursalut ProgElecT,
réparé le 23/02/2019 à 8:58 -
DMike92Membre du ClubBonjour,
Merci pour cette nouvelle fonctionnalité fort séduisante.
Cependant, si je créé un script en dehors du dossier d'installation, il ne reconnait plus l'InputBox amélioré mais seulement vbs. J'ai loupé quelque chose ?
D'avance merci pour les réponses
Michel
(et je n'ai pas trouvé où créer un nouveau fil...)le 15/03/2019 à 11:25 -
DMike92Membre du ClubMerci beaucoup pour cette réponse et aussi pour cette mise à jour fantastique.
Je dois parti en déplacement demain pour 2 jours ; je testerai donc plus tard mais ne manquerai pas de revenir ici pour le retour.
Michel
note : peut-être qu'un indication sur le path à modifier pourrait aussi être une option ?le 18/03/2019 à 23:14