IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Présentation d'une extension personnalisée enrichie de la fonction InputBox de VBScript : Vbs eXtended InputBox
Un tutoriel de Omen

Le , par omen999

26PARTAGES

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

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de omen999
Rédacteur https://www.developpez.com
Le 08/07/2019 à 17:59
bonjour,

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.
ci-dessous un exemple de boite de dialogue très simple avec seulement deux ctrls label et deux ctrls edit
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ée

Code : Sélectionner tout
1
2
3
4
5
6
7
8
Option 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
2  0 
Avatar de omen999
Rédacteur https://www.developpez.com
Le 15/07/2019 à 15:18
en gros, tu voudrais bien un exemple tout fait...

le script test.vbsx :
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Option 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)
le fichier batch (tant qu'à faire) test.bat :
Code bat : Sélectionner tout
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...) :

2  0 
Avatar de omen999
Rédacteur https://www.developpez.com
Le 16/07/2019 à 15:54
et désoler si vous avez pensé que je veux un script tout fait ce n'était pas ça,
pas de souci les exemples sont toujours bon à prendre

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 : Sélectionner tout
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
27
Option 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 plus élégant serait évidemment que ton powershell accepte directement les paramètres en ligne de commande
2  0 
Avatar de omen999
Rédacteur https://www.developpez.com
Le 18/03/2019 à 16:12
(et je n'ai pas trouvé où créer un nouveau fil...)
et c'est très bien ainsi car ton message est au bon endroit

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ée
1  0 
Avatar de omen999
Rédacteur https://www.developpez.com
Le 19/03/2019 à 14:08
note : peut-être qu'un indication sur le path à modifier pourrait aussi être une option ?
oui ça me parait une bonne idée
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'article
1  0 
Avatar de omen999
Rédacteur https://www.developpez.com
Le 04/02/2022 à 14:57
Citation Envoyé par Patrick22 Voir le message

J'ai eu une erreur bizarre :
  1. J'ai remplacé, après sauvegarde, la DLL puis j'ai exécuté de RunXboxClip.bat, histoire de voir la compatibilité ascendante,
    et j'ai quitté XboxClip.vbsx par la croix de fermeture de la fenêtre.
    Mauvaise surprise : Erreur d'autorisation sur .parentWindow.clipboardData.getData("Text"
  2. Même erreur au 2ème essai ensuite en quittant par le bouton "Annuler".
  3. Au 3ème essai en quittant avec le bouton "Ok", il n'y a pas eu de soucis.

Curieusement, maintenant les deux premiers essais infructueux fonctionnent normalement. Impossible de reproduire l'erreur.
Je te noterai bien la démarche si ça se reproduit au prochaine démarrage.
Ah 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 : Sélectionner tout
1
2
3
Dim sclip
sclip = CreateObject("htmlfile").parentWindow.clipboardData.getData("Text")
If IsNull(sclip) Then MsgBox "le presse-papiers est vide" Else MsgBox sclip
1  0 
Avatar de ProgElecT
Modérateur https://www.developpez.com
Le 22/02/2019 à 22:39
Salut 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.
je pense qu'il devrait être https://www.developpez.net/forums/d1...tbox-vbscript/
0  0 
Avatar de omen999
Rédacteur https://www.developpez.com
Le 23/02/2019 à 8:58
salut ProgElecT,

réparé
0  0 
Avatar de DMike92
Membre du Club https://www.developpez.com
Le 15/03/2019 à 11:25
Bonjour,
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...)
0  0 
Avatar de DMike92
Membre du Club https://www.developpez.com
Le 18/03/2019 à 23:14
Citation Envoyé par omen999 Voir le message
et c'est très bien ainsi car ton message est au bon endroit

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ée
Merci 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 ?
0  0