[VBS] Faire un "File Open Dialog"

Faire un "File Open Dialog" [VBS] - VB/VBA/VBS - Programmation

Marsh Posté le 20-07-2005 à 19:14:26    

Bonjour,
 
Contexte :
- Windows 2000 Professionnel
- VBScript (Visual Basic Script)
 
Question : Je souhaite ouvrir une fenetre pour selectionner un fichier (en VBScript).
 
C'est la classique "File Open Dialog" que vous avez quand vous lancez n'importe quelle application et que vous faites un Ctr+O. Bien que ce soit la chose la plus simple que l'on puisse demander, j'epluche des pages et des pages sans trouver de methodes qui marchent.
 
Voici quelques exemples recurrents qui ne marchent pas (au moins dans mon environnement) :
 

set WSHShell = wscript.CreateObject("wscript.Shell" )
set objDlg = wscript.CreateObject("MSComDlg.CommonDialog" )
objDlg.Filter = "All Files (*.*)|*.*|VBScript Files (*.vbs)|*.vbs"
objDlg.FilterIndex = 2
objDlg.MaxFileSize = 260
objDlg.CancelError = true
objDlg.ShowOpen
WSHShell.popup objDlg.Filename


 

Dim oShExt, code
 
' create object reference
Set oShExt = WScript.CreateObject("ShellExtension.ShellObjects" )
 
' now we set the properties of the dialog
oShExt.WSHDialogTitle = "Born's Open dialog"  ' Title
oShExt.WSHDialogFilter = "All files (*.*)" & chr(0) & _
                         "*.*" & chr(0) & _
                         "VBScript files (*.vbs)" & chr(0) & _
                         "*.vbs" & chr(0) & _
                         "JScript files (*.js)" & chr(0) & _
                         "*.js" & chr(0) & _
                         "WSC files (*.wsc)" & chr(0) & _
                         "*.wsc" & chr(0)
 
oShExt.WSHDialogFilterIndex = 2  ' 2nd entry selected
 
oShExt.WSHDialogInitDir = "C:\"  ' empty string = current directory
 
If oShExt.WSHShowOpen () <> 0 Then  
 MsgBox "File " & oShExt.WSHDialogFile
Else
 MsgBox "Sorry, no file selected"
End if


 

Set ObjFSO = CreateObject("Shell.FileSystemObject.CommonDialog" )
 
ObjFSO.Filter = "VBScripts|*.vbs|Text Documents|*.txt|All Files|*.*"
 
ObjFSO.FilterIndex = 3
 
ObjFSO.InitialDir = "c:\myscripts"
 
InitFSO = ObjFSO.ShowOpen
 
If InitFSO = False Then
    Wscript.Echo "Script Error: Please select a file!"
    Wscript.Quit
Else
    Wscript.Echo "You selected the file: " & ObjFSO.FileName
End If


 
Je suis sidere que l'information soit si dure a trouver alors que c'est une demande assez commune ... Je continue mes recherches.
 
Merci d'avance.
 
piloupy

Reply

Marsh Posté le 20-07-2005 à 19:14:26   

Reply

Marsh Posté le 20-07-2005 à 22:59:10    

Ce n'est effectivement pas si simple. Mes premières fonctions concernant ce problème étaient ok sur du xp, mais ne fonctionnaient pas sur du 2003 server.
Je suis parti d'un exemple de 3 lignes trouvé je ne sais plus ou pour batir la fonction suivante. ( testée sur du xp (pro) et du 2003 server )
 
 

Code :
  1. '===================================================
  2. ' la fonction suivante permet de choisir un fichier
  3. ' Elle retourne  le chemin\nomdufichier
  4. ' ou "" si appuie sur le bouton annuler
  5. '
  6. ' exemple : select_a_file("xls" ) pour forcer une sélection de fichiers excel
  7. ' Si vous ne voulez pas filtrer suivant une extension :
  8. ' select_a_file("" )
  9. Function select_a_file(type_extension)
  10. Dim extension ' extension du fichier
  11. Dim x
  12. Dim Comp
  13. Dim oDF
  14. set objDialog  = CreateObject("SAFRCFileDlg.FileOpen" )
  15. ' exposed in safrcdlg.dll
  16. Do
  17.   x = objDialog.OpenFileOpenDlg
  18.   ' pour info x = 1 si un fichier est choisi, 0 si annuler
  19.   ' pour info  insérer la ligne x = cstr(x)
  20.   ' pour d'éventuelle comparaison, utilisation du contenu de x,
  21.   ' sinon problème de type de ' variable
  22.   oDF =  objDialog.FileName
  23.   If type_extension <> "" Then
  24.           'on extrait l'extension du fichier choisi
  25.           extension = Right(oDF,len(oDF)-InStrRev(oDF, "." ))
  26.           ' on compare avec le type prévu
  27.           Comp = StrComp(extension, type_extension, vbTextCompare)
  28.   Else
  29.           Comp = 0   ' pas de filtrage
  30.   End if
  31. Loop until (Comp=0) or (oDF="" )
  32. select_a_file = oDF
  33. End Function


Message édité par c_moa le 20-07-2005 à 23:01:03
Reply

Marsh Posté le 21-07-2005 à 09:21:51    

Ca marche pas sous Win 2000 Professionnel :
 
"Un composant ActiveX ne peut pas creer un objet : 'SAFRCFileDlg.FileOpen'"
 
piloupy

Reply

Marsh Posté le 21-07-2005 à 13:59:02    

set WSHShell = wscript.CreateObject("wscript.Shell" )
set objDlg = wscript.CreateObject("MSComDlg.CommonDialog" )
objDlg.Filter = "All Files (*.*)|*.*|VBScript Files (*.vbs)|*.vbs"
objDlg.FilterIndex = 2
objDlg.MaxFileSize = 260
objDlg.CancelError = true
objDlg.ShowOpen
WSHShell.popup objDlg.Filename


 
Ce code marche sur certaines plateformes. En ce qui me concerne, je cherche ce qu'il faudrait installer pour que ca marche sur un Windows 2000 Professionnel.
 
J'ai 2 Windows 2000 Professionnel 5.00.2195, Service Pack 4, et ca marche sur l'un et pas sur l'autre. J'ai tente de savoir pourquoi, mais je n'y parviens pas.
 
Sur le Windows 2k qui marche, DirectX 9.0b est installe.
Sur le Windows 2k qui ne marche pas, Directx 9.0c est installe (yavait le DX 7.0 avant).
 
En me promenant avec mon arpenteur sur la Toile (lol), je crois avoir trouve que c'est le fichier C:\WINDOWS\system32\comdlg32.ocx qui contient la classe MSComDlg ...
 
Je ne sais pas trop quoi faire de plus ... Aidez-moi par pitie :cry:  
 
piloupy

Reply

Marsh Posté le 21-07-2005 à 14:48:24    

Sur ce site :
 
http://www.bellamyjc.net/fr/vbsgeneralites.html
 
Il faut telecharger le fichier :
 
"vb5ccein.exe"
 
Et le code suivant marchera :
 

set WSHShell = wscript.CreateObject("wscript.Shell" )
set objDlg = wscript.CreateObject("MSComDlg.CommonDialog" )
objDlg.Filter = "All Files (*.*)|*.*|VBScript Files (*.vbs)|*.vbs"
objDlg.FilterIndex = 2
objDlg.MaxFileSize = 260
objDlg.CancelError = true
objDlg.ShowOpen
WSHShell.popup objDlg.Filename


 
J'ai trouve la reponse sur ce site :
 
http://www.softimage.com/community [...] g00947.htm
 
En plein milieu d'un post, et c'est la premiere fois que je vois cette reponse ...
 
Comme vous pouvez le voir, le secret pour ouvrir une "File Open Dialog" (selectionner un fichier dans un browser) est un secret bien cache, car cette fonction doit etre reservee a des utiliseurs avances seulement. Les utilisateurs basiques n'ouvrent pas de fichier : ils refont toujours tout a zero.
 
C'est a se demander pourquoi on a des disques durs ... quand on sait que Microsoft ne preconise pas le chargement de donnees presentes dessus ... jvous jure ...
 
piloupy

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed