1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    novembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2013
    Messages : 3
    Points : 2
    Points
    2

    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
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    décembre 2004
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : décembre 2004
    Messages : 4 461
    Points : 9 478
    Points
    9 478

    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()
    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
    Candidat au Club
    Profil pro
    Inscrit en
    novembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2013
    Messages : 3
    Points : 2
    Points
    2

    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 150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2006
    Messages : 1 150
    Points : 3 044
    Points
    3 044

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

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