Problème de syntaxe (et même de compréhension ..)
Bonjour,
Je viens de trouver ce script sur la toile :
Code:
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:
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.