Developpez.com - Visual Basic 6

Le Club des Développeurs et IT Pro

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
  Discussion forum
22 commentaires
  • omen999
    Rédacteur
    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 :
    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
  • omen999
    Rédacteur
    en 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
    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 :
    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...) :

  • omen999
    Rédacteur
    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 :
    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
  • omen999
    Rédacteur
    (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
  • omen999
    Rédacteur
    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
  • omen999
    Rédacteur
    Envoyé par Patrick22

    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 :
    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
  • ProgElecT
    Expert éminent sénior
    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/
  • omen999
    Rédacteur
    salut ProgElecT,

    réparé
  • DMike92
    Membre du Club
    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...)
  • DMike92
    Membre du Club
    Envoyé par omen999
    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 ?