Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Vos Contributions VBScript Discussion :

[Outil] Vbs eXtended InputBox pour VbScript


Sujet :

Vos Contributions VBScript

  1. #1
    Rédacteur

    [Outil] Vbs eXtended InputBox pour VbScript
    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
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  2. #2
    Rédacteur/Modérateur

    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/
    ProgElecT
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.

  3. #3
    Rédacteur

    salut ProgElecT,

    réparé
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  4. #4
    Membre du Club
    Installation Vbsx
    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...)

  5. #5
    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
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  6. #6
    Membre du Club
    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 ?

  7. #7
    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
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  8. #8
    Membre du Club
    Super
    Citation Envoyé par omen999 Voir le message
    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
    Je crois que j'ai un peu sur-estimé mon temps libre...
    Je ne reviens que maintenant !

    En tous cas c'est super
    Ça fonctionne impeccable (seulement après reboot, bien sûr)
    Et quand je parlais du path à modifier je voulais juste dire qu'une petite explication pour dire quoi ajouter dans le path pourrait suffire. Mais c'est encore mieux comme ça
    (en même temps on peut deviner que l'est le chemin d'installation à ajouter dans la variable Path).

    Merci encore pour cette belle extension, je sens que je vais me remettre à VbScript (je dois avoir 250 à 300 scripts mais tous ne servent plus) !

  9. #9
    Futur Membre du Club
    [Outil] Vbs demande d'infos
    Bonjour, déjà merci pour ses VBSCRIPT, je suis nouveau sur ce forum et débutant en VBS , je voudrais savoir comment récupérer les informations de chaque chant séparément pour les mètres dans une variable
    merci

  10. #10
    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 :Sélectionner tout -Visualiser dans une fenêtre à part
    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 <img src="images/smilies/icon_neutral.gif" border="0" alt="" title=":|" class="inlineimg" />edit~86~17~160~21~contenu initial n°1|label~10~46~70~19~Libellé n°2 <img src="images/smilies/icon_neutral.gif" border="0" alt="" title=":|" class="inlineimg" />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
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  11. #11
    Futur Membre du Club
    Outil] Vbs demande d'infos
    Merci, pour l’explication, j'ai projet d'un script qui utiliserait cette fonction pour l'installation d'une imprimante réseaux je m'explique, je voudrais avoir une fenêtre avec un logo et 4 champs qui demanderaient à l'utilisateur d’entrée l'adresse IP ? une autre le NOM DE L'IMPRIMANTE, la 3e le type de pilote, le 4e la config, récupérer les entrées de ces 4 champs pour les renvoyer dans un script batch . merci pour votre aide si vous avais une piste ou un exemple , je suis preneur en vous remerciant.

  12. #12
    Rédacteur

    en gros, tu voudrais bien un exemple tout fait...

    le script test.vbsx :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    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 -Visualiser dans une fenêtre à part
    1
    2
    3
    @echo off
    for %%a in (%1 %2 %3 %4) do echo %%a
    pause


    le logo :

    et le résultat (tu peux garder le logo...) :

    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  13. #13
    Futur Membre du Club
    Bonjour merci pour la réponse et désoler si vous avez pensé que je veux un script tout fait ce n'était pas ça, mais juste pour exposer mon projet, je débute en vbscript, et j'ai réalisé ceci à ma façon qui n'est pas la meilleure mais j'essaie de comprendre .

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    Option explicit
    Dim title,defaut,rep,data,var1,var2,var3,var4,pass,pass2,pass4,pass3,com,Result,WshShell,f,fso,chemin,oShell,strHomeFolder,objShell
     
    title="Installation MULTIFONCTION"
     
    defaut="dlg~-1~-1~600~400|frame~10~10~132~132|img~12~12~128~128~atom128.ico|frame~146~23~70~2|label~216~14~210~19~ Installation MFP |frame~414~23~70~2|group~150~38~300~98~ &Script d'installation |label~184~70~240~29~ PROGRAME D'INSTALLATION POUR MULTIFONCTION CREE PAR MOI |group~10~148~150~98~&TYPE DE PILOTE|rdbox~14~172~82~19~Type PCL|rdbox~14~210~82~19~Type PS|label~10~250~200~19~&Configuration de L'imprimante <img src="images/smilies/icon_neutral.gif" border="0" alt="" title=":|" class="inlineimg" />cbox~10~272~444~100~Recto-N/B#Recto-Couleur#Recto-Verso-N/B#Recto-Verso-Couleur|label~168~148~184~19~&Informations d'installation |frame~350~158~126~2|label~168~172~166~19~Nom de L'imprimante <img src="images/smilies/icon_neutral.gif" border="0" alt="" title=":|" class="inlineimg" />edit~300~170~170~21~|label~168~199~190~19~Adresse IP de L'imprimante <img src="images/smilies/icon_neutral.gif" border="0" alt="" title=":|" class="inlineimg" />ipctrl~335~198~148~21~127.0.0.1|label~168~230~40~19~&Date <img src="images/smilies/icon_neutral.gif" border="0" alt="" title=":|" class="inlineimg" />datepick~212~228~100~21~" & Date & "|label~10~305~450~38~Notice : test"
     
    rep=InputBox("",title,defaut)
     
    data = Split(rep,"|")
     
     
    If UBound(data) > 0 then var1="drivers=" & data(2) & vbCrLf ' les valeurs séparées de chaque ctrl edit
    If UBound(data) > 0 then var2="config:" & data(4) & vbCrLf 
    If UBound(data) > 0 then var3="Nom," & data(5)& vbCrLf
    If UBound(data) > 0 then var4="IP;" & data(6) & vbCrLf
     
    'Preparation de l'environnement
     
    Set oShell = CreateObject("WScript.Shell")
    strHomeFolder = oShell.ExpandEnvironmentStrings("%USERPROFILE%\downloads\fichier.txt")
     
    Set fso=CreateObject("Scripting.FileSystemObject")
    chemin="fichier.txt"
    '"8" = ecriture en fin de fichier, "1" = Lecture seul , "2" = Ecriture seul
    '"true" crée le fichier si non existant, "false" ne crée pas le fichier
    'Ouverture du fichier et ecriture en fin (ligne par ligne)
    set f=fso.OpenTextFile(chemin,8,True)
    pass=var1
    pass2=var2
    Pass3=var3
    pass4=var4
    'Ecrire dans le fichier
    f.WriteLine(pass)
    f.WriteLine(pass2)
    f.WriteLine(pass3)
    f.WriteLine(pass4)
    f.close
    set f=nothing
    set fso=nothing
     
    Set WshShell = CreateObject("WScript.Shell")
    Set objShell = (CreateObject("Wscript.shell"))
    com="cmd /c start.bat" 
    Result=WshShell.Run(com,1,True)'Option 1 Console Visible.Option 0 Console Invisible
    Call objShell.Run("PowerShell -NoProfile -ExecutionPolicy Bypass -Command nbrecto.ps1", 1, True)




    fichier BAT

    Code bat :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    start.bat
     
    FOR /F "tokens=2  delims=," %%i in ('type fichier.txt^|findstr /r "," ') do set NOM=%%i
    FOR /F "tokens=2 delims==" %%i in ('type fichier.txt^|findstr /r "=" ') do set drivers=%%i
    FOR /F "tokens=2 delims=:" %%i in ('type fichier.txt^|findstr /r ":" ') do set config=%%i
    FOR /F "tokens=2  delims=;" %%i in ('type fichier.txt^|findstr /r ";" ') do set IP=%%i

  14. #14
    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 :Sélectionner tout -Visualiser dans une fenêtre à part
    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
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  15. #15
    Futur Membre du Club
    [Outil] Vbs eXtended InputBox pour VbScript
    Merci, je vais utiliser ton script
    c'est vrai que j'ai fait compliqué je débute et ce n'est pas évident, je vais revoir tout ça

    mais je n'ai pas compris quand tu dis que

    le plus élégant serait évidemment que ton powershell accepte directement les paramètres en ligne de commande.

    Merci

  16. #16
    Rédacteur

    mais je n'ai pas compris quand tu dis que

    le plus élégant serait évidemment que ton powershell accepte directement les paramètres en ligne de commande.
    les scripts powershell acceptent les arguments en ligne de commande et même les arguments nommés
    de mémoire quelque chose comme ça (à faire vérifier par un connaisseur du pws) :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    shl.Run "PowerShell -NoProfile -ExecutionPolicy Bypass -Command nbrecto.ps1 " & "-IP " & params(0), 1, True


    le code du script pws devra évidemment être remanié pour que les paramètres soient lus à partir des arguments nommés et non à partir de l'environnment
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  17. #17
    Futur Membre du Club
    Vbs eXtended InputBox pour VbScript
    Bonjour j'ai avancé sur mon projet mais j'ai 2 petits soucis que je n'arrive pas à résoudre

    - le premier est quand je mais sur le tableau a l'emplacement du NOM exemple I200-CPT ( impriment 200 comptas) et que je valide la fenêtre se ferme sans continuer. le script

    - le 2éme dans mon script BATCH je crée un fichier powershelle (nbrecto.ps1) pour configurer mon imprimante mais à la fin du script j'obtiens des erreurs powershell

    aurais tu une idée Merci



    fichier test.bat
    Code BAT :Sélectionner tout -Visualiser dans une fenêtre à part
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    @ECHO OFF
     
     
    for %%a in (%1) do SET IP=%%a
    for %%b in (%2) do SET NOM=%%b
    for %%d in (%3) do SET drivers=%%d
    for %%c in (%4) do SET config=%%c
     
     
    ::Je récupere le nom de l'ordinateur
    FOR /f "tokens=2 delims==" %%f IN ('wmic os get CSName /value ^| find "="') DO SET "nompc=%%f"
     
     
    if %%c == 3 goto Action_3
    if %%c == 2 goto Action_4
    if %%c == 1 goto Action_5
    if %%c == 0 goto Action_6
     
     
     
    :Action_3
    set color=1
    set rv=1
    goto configure
     
    :Action_4
    set color=1
    set rv=0
    goto configure
     
    :Action_5
    set color=0
    set rv=1
    goto configure
     
    :Action_6
    set color=0
    set rv=0
    goto configure
     
     
     
    :configure
    > %USERPROFILE%\Downloads\nbrecto.ps1 echo $PrintConfiguration = Get-PrintConfiguration -computernam %nompc% -PrinterName "%NOM%"
    >> %USERPROFILE%\Downloads\nbrecto.ps1 echo $PrintConfiguration.color=%color%
    >> %USERPROFILE%\Downloads\nbrecto.ps1 echo $PrintConfiguration.DuplexingMode=%rv%
    >> %USERPROFILE%\Downloads\nbrecto.ps1 echo set-PrintConfiguration -InputObject $PrintConfiguration
    >> %USERPROFILE%\Downloads\nbrecto.ps1 echo Get-PrintConfiguration -computernam %nompc% -PrinterName "%NOM%"
     
     
    powershell -Command "& {$PrintConfiguration = Get-PrintConfiguration -computernam %nompc% -PrinterName "%NOM%" ; $PrintConfiguration.color=%color% ; $PrintConfiguration.DuplexingMode=%rv% ; set-PrintConfiguration -InputObject $PrintConfiguration ; Get-PrintConfiguration -computernam %nompc% -PrinterName "%NOM%"}"

    fichier installe.vbsx
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    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="Installation MULTIFONCTION "
    res(0) = "dlg~-1~-1~650~290~3"
    res(1) = "img~10~15~220~220~kmicone.ico"
    res(2) = "label~260~15~60~19~Adresse IP :"
    res(3) = "ipctrl~366~10~130~21~0.0.0.0"
    res(4) = "label~260~40~102~19~Nom de l'imprimante :"
    res(5) = "edit~366~36~160~20"
    res(6) = "label~260~66~105~19~Type de pilote :"
    res(7) = "clbox~366~60~90~40~PCL6#PS"
    res(8) = "label~260~95~100~19~Configuration  :"
    res(9) = "clbox~366~90~130~19~Recto-N/B#Recto-Couleur#Recto-Verso-N/B#Recto-Verso-Couleur" 
     
    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)

  18. #18
    Rédacteur

    et que je valide la fenêtre se ferme sans continuer. le script
    si tu valides le champ texte avec la touche <Enter> c'est le comportement normal d'une dialogbox car le bouton <OK> est le bouton par défaut (liseré bleu)
    pour circuler entre les différents champs, il faut utiliser la touche tabulation
    comme c'est le comportement standard, je ne le modifierai pas (peut-être une option dans une version future)

    mais à la fin du script j'obtiens des erreurs powershell
    pour les erreurs powershell, adresse-toi au sous-forum qui concerne ce langage
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp