Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1802 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBS] Faire un "File Open Dialog"

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VBS] Faire un "File Open Dialog"

n°1155253
piloupy
Posté le 20-07-2005 à 19:14:26  profilanswer
 

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

mood
Publicité
Posté le 20-07-2005 à 19:14:26  profilanswer
 

n°1155399
c_moa
Posté le 20-07-2005 à 22:59:10  profilanswer
 

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
n°1155553
piloupy
Posté le 21-07-2005 à 09:21:51  profilanswer
 

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

n°1155985
piloupy
Posté le 21-07-2005 à 13:59:02  profilanswer
 

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

n°1156076
piloupy
Posté le 21-07-2005 à 14:48:24  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBS] Faire un "File Open Dialog"

 

Sujets relatifs
[VBS] Effacer (Purger) le presse-papiers (clipboard)[VBS] liste computer dans AD domaine diff
[Résolu] Common dialog[Résolu] Vbs+excel :(
[VBS] Redimensionner un tableau a plusieurs dimensions[VBS/EXCEL] Répondre à une MsgBox
[help]restriction in effect. File is not within the allowed path(s)VBS Commande externe
Remoting - File.Delete ou File.MoveInput de type file
Plus de sujets relatifs à : [VBS] Faire un "File Open Dialog"


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR