Bonjour,
Je viens de trouver ce script sur la toile :
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.
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
Ç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 :
Et ... rien ne se passe !
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
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.
Partager