IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

VBScript Discussion :

Problème de syntaxe (et même de compréhension ..)


Sujet :

VBScript

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 29
    Points : 7
    Points
    7
    Par défaut Problème de syntaxe (et même de compréhension ..)
    Bonjour,

    Je viens de trouver ce script sur la toile :

    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
     
        filePath = BrowseForFile()
        If filePath = "" Then
        MsgBox "Operation canceled", vbcritical
        Else
        MsgBox filePath, vbinformation
        End If
     
        '--------------------------------------------------------------------------------------
        Function BrowseForFile()
        '@description: Browse for file dialog.
        '@author: Jeremy England (SimplyCoded)
        BrowseForFile = CreateObject("WScript.Shell").Exec("mshta.exe ""about:<input type=file id=f>" & _
        "<script>resizeTo(0,0);f.click();new ActiveXObject('Scripting.FileSystemObject')" & _
        ".GetStandardStream(1).WriteLine(f.value);close();</script>""" _
        ).StdOut.ReadLine()
        End Function
    La fonction permet d'afficher la fenêtre standard de séléction d'un fichier et renvoie le nom complet de celui sélectionné. Le début du script n'est là que pour illustrer le fonctionnement.

    Ça fonctionne parfaitement mais l'écriture est particulièrement condensée et j'ai souhaité l'aérer pour mieux comprendre le mécanisme.

    J'ai donc cru obtenir le même résultat avec ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        filePath = BrowseForFile()
        If filePath = "" Then
        MsgBox "Operation canceled", vbcritical
        Else
        MsgBox filePath, vbinformation
        End If
        '--------------------------------------------------------------------------------------
        Function BrowseForFile()
        htafic = "about:<input type=file id=f><script>resizeTo(0,0);f.click();new ActiveXobject('Scripting.FileSystemObject').GetStandardStream(1).WriteLine(f.value);close()</script>"
        MsgBox htafic
        Set MonShell = CreateObject("WScript.Shell")
        BrowseForFile = MonShell.Exec("mshta.exe ""htafic""").StdOut.ReadLine()
        End Function
    Et ... rien ne se passe !

    Ce que j'ai cru comprendre sur le fonctionement de la fonction : on lance mshta en lui passant en paramètre une chaîne de caractères sensée repésenter le contenu d'un fichier hta à l'intérieur duquel on exécute un script VBS.

    Je n'ai rien trouvé à propos de "about:" mais je suppose que c'est une commande HTML qui permet d'établir un comportement général pour tout ce qui suit et que les indications qu'elle contient auraient tout aussi bien pu être mises dans la balise <script>

    Dans le script, toujours avec les mêmes réserves :
    - on commence par réduire à rien la taille de la fenêtre ;
    - on simule un click ;
    - on instancie un objet ActiveX et le nom du fichier sélectionné (f.value) est écrit dans la sortie standard ;
    - on clos quelque chose, la fenêtre ouverte par mshta je suppose.

    La fonction prend la valeur lprésente dans la sortie standard.

    Je n'ai rien trouvé non plus sur le ";" qui apparaît dans le texte du script. Je suppose qu'il sert de séparateur. Il est peut-être possible de jouer avec des VbCrLf à la place de manière à donner au script une allure plus habituelle.

    Le Msgbox dans la fonction est de mon cru est n'est là que pour la mise au point.

    Il y a sûrement des tas de trucs qui m'échappent et j'aurai bien besoin de vos lumières.

    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 105
    Points : 16 627
    Points
    16 627
    Par défaut
    Salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BrowseForFile = MonShell.Exec("mshta.exe " & chr(34) & htafic & chr(34)).StdOut.ReadLine()

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 29
    Points : 7
    Points
    7
    Par défaut
    Oups. J'avais effectivement oublié de concaténer ma variable htafic à l'exec. J'avais perdu de vue comment devait être formée cette chaîne de caractères. J'ai finalement opté pour mettre les guillemets nécessaires dans htafic et ma tentative de rendre ce code plus lisible donne cà :
    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
     
    '-------------------------------------
    'Récupération nom complet d'un fichier
    '-------------------------------------
     
    filePath = BrowseForFile()
    If filePath = "" Then
      MsgBox "Operation canceled", vbcritical
    Else
      MsgBox filePath, vbinformation
    End If
     
    '---------------------
    'Fonction récupération
    '---------------------
     
    Function BrowseForFile()
     
    '--------------------
    '  Pseudo fichier HTA
    '--------------------
    htafic = """about:<input type=file id=f>" & _
    	 "<script>" & _
             "resizeTo(0,0);" & _
    	 "f.click();" & _
    	 "new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).WriteLine(f.value);" & _
    	 "close()" & _
    	 "</script>"""
    '----------------------
    '  Création objet shell
    '----------------------
    Set MonShell = CreateObject("WScript.Shell")
    '-----------
    '  Exécution
    '-----------
    BrowseForFile = MonShell.Exec("mshta.exe " & htafic).StdOut.ReadLine()
     
    End Function
    Merci pour ton intervention.

  4. #4
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 299
    Points : 3 554
    Points
    3 554
    Par défaut
    Bonjour,

    Une version plus élaborée pour occuper le weekend
    (toutes les versions sont dans la FAQ btw)

    le fil de discussion original

Discussions similaires

  1. Problème de syntaxe - elements['x'].value
    Par Equus dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/02/2005, 11h22
  2. [Interbase] Problème de syntaxe SQL
    Par navis84 dans le forum InterBase
    Réponses: 4
    Dernier message: 22/12/2004, 17h07
  3. Problème de syntaxe
    Par Mister_FX dans le forum ASP
    Réponses: 5
    Dernier message: 30/06/2004, 10h01
  4. Problème de syntaxe ADO ...
    Par bendev dans le forum ASP
    Réponses: 2
    Dernier message: 15/04/2004, 14h38
  5. Réponses: 2
    Dernier message: 08/03/2004, 15h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo