Récupérer le chemin du programme associé à un fichier d'après son extension


Contenu du snippet

Private Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" (ByVal lpFileName As String) As Long
Private Declare Function FindExecutable Lib "shell32.dll" Alias "FindExecutableA" (ByVal lpFile As String, ByVal lpDirectory As String, ByVal lpResult As String) As Long
Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Function GetExePathFileFromExtention(ByVal  sExtension As  String) As  String
    Dim sPath As String, lRet As Long, sBuffer As String, FF As Integer
    
'   on récupère le chemin TEMP
    sBuffer = String$(512, vbNullChar)
    lRet = GetTempPath(512, sBuffer)
    sPath = Left$(sBuffer, lRet)
    If Not (RightB$(sPath, 2) = "\") Then sPath = sPath & "\"
'   on crée un fichier  temporaire
    sPath = sPath & Format$(Now, "MMDDHHNNSS") & "." & sExtension
    FF = FreeFile
    Open sPath For Output As #FF
        Print #FF, vbNullString
    Close #FF
'   on récupère l'exe associé
    sBuffer = String$(260, vbNullChar)
    lRet = FindExecutable(sPath, vbNullString,  sBuffer)
'   retour
    If lRet > 32 Then
        GetExePathFileFromExtention = Left$(sBuffer, InStr(sBuffer, vbNullChar) -  1)
    Else
        GetExePathFileFromExtention = vbNullString
    End If
    
'   supprime fichier  temp
    Call DeleteFile(sPath)
End Function


Compatibilité : VB6, VBA

Disponible dans d'autres langages :

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.