Afficher la fenetre "Ouvrir avec"

Résolu
cs_Stefun Messages postés 9 Date d'inscription mercredi 9 novembre 2005 Statut Membre Dernière intervention 9 novembre 2010 - 9 nov. 2010 à 16:08
CTAC Messages postés 133 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 8 juin 2012 - 9 nov. 2010 à 19:32
Bonjour,

j'aimerais afficher la boite de dialogue "Ouvrir avec" (qui permet d'associer un type de fichier à un programme).

En fait j'essaye d'ouvrir un fichier avec la commande ShellExecute et lorsque le fichier est de type inconnu, cette fonction me renvoie 5 !
Bizaremment et d'après cette page je devrais avoir 31 (ou 14 peut-être). Bref suite à ce retour j'aimerais afficher cette boite de dialogue pour avoir le même comportement que lorsqu'on essaye d'ouvrir ce fichier inconnu depuis l'explorateur Windows.

Voici mon code :

mon_fichier = "essai.test"
mon_dossier = "c:"
retour = ShellExecute(0, "open", mon_fichier, "", mon_dossier, 3)

' Le fichier n'est associé à aucun programme
If retour = 5 Then
[OUVRIR LA BOITE DE DIALOGUE "OUVRIR AVEC"]
End If



Merci pour votre aide

2 réponses

cs_Stefun Messages postés 9 Date d'inscription mercredi 9 novembre 2005 Statut Membre Dernière intervention 9 novembre 2010
9 nov. 2010 à 16:22
Merci à moi, j'ai trouvé !!! :)


Voici la ligne manquante :

ShellExecute 0, vbNullString, "RUNDLL32.EXE", "shell32.dll,OpenAs_RunDLL " & mon_fichier, mon_dossier, vbNormalFocus


TchuB !!
3
CTAC Messages postés 133 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 8 juin 2012 5
9 nov. 2010 à 19:32
Bonjour,

Une autre façon de faire sans le rundll

Const SEE_MASK_INVOKEIDLIST = &HC
Const SEE_MASK_NOCLOSEPROCESS = &H40
Const SEE_MASK_FLAG_NO_UI = &H400
Private Type SHELLEXECUTEINFO
    cbSize As Long
    fMask As Long
    hwnd As Long
    lpVerb As String
    lpFile As String
    lpParameters As String
    lpDirectory As String
    nShow As Long
    hInstApp As Long
    lpIDList As Long
    lpClass As String
    hkeyClass As Long
    dwHotKey As Long
    hIcon As Long
    hProcess As Long
End Type
Private Declare Function ShellExecuteEx Lib "shell32.dll" (SEI As SHELLEXECUTEINFO) As Long
Sub OuvrirAvec(FileName$)
    Dim SEI As SHELLEXECUTEINFO
    Dim r As Long
    With SEI
        .cbSize = Len(SEI)
        .fMask = SEE_MASK_NOCLOSEPROCESS Or _
         SEE_MASK_INVOKEIDLIST Or SEE_MASK_FLAG_NO_UI
        .hwnd = 0&
        .lpVerb = "openas"
        .lpFile = FileName
        .lpParameters = vbNullChar
        .lpDirectory = vbNullChar
        .nShow = 0
        .hInstApp = 0
        .lpIDList = 0
    End With
    r = ShellExecuteEx(SEI)
End Sub
Sub Test()
    Dim MonFichier$
    MonFichier = "C:\essai.test"
    OuvrirAvec MonFichier
End Sub


largement inspiré de http://allapi.mentalis.org/apilist/ShellExecuteEx.shtml#

ctac
0
Rejoignez-nous