Lancer un fichier avec son programme par defaut sans shellexecute

Description

J'ai ecrit ce bout de code pcq sheelExecute m'a saoulé en me retournant un code 42 qui correspond à dieu seul sait koi...bref il y avait un processus qui tourner mais rien...donc voila ce code ki marche relativement bien...enfin vous me direz...
Je me sert des associations dans la base de registre.
A priori ca marche sur tous les systemes.(Windows bien entendu)

Source / Exemple :


Private Sub Command1_Click()
    Dim extension As String
    Dim pos As Integer
    Dim tmp1 As String
    Dim tmp2 As String
    
    pos = InStrRev(TextFichier.Text, ".")
    extension = Right(TextFichier.Text, Len(TextFichier.Text) - pos + 1)
    Debug.Print "extension :" & extension
    tmp1 = LireValeur(HKeyClassesRoot, extension, "")
    tmp2 = LireValeur(HKeyClassesRoot, tmp1 & "\shell\open\command", "")

    tmp2 = Replace(tmp2, "%SystemRoot%", WinDirectory)
    tmp2 = Replace(tmp2, Chr(34) & "%1" & Chr(34), Chr(34) & TextFichier.Text & Chr(34))
    tmp2 = Replace(tmp2, "%1", Chr(34) & TextFichier.Text & Chr(34))
    
    Debug.Print tmp1
    Debug.Print tmp2
    ret = Shell(tmp2, vbNormalFocus)
    
End Sub

'Quelques déclarations utiles pour lire la base de registre
'pris sur VBfrance

Const HKEY_CLASSES_ROOT = &H80000000
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_USERS = &H80000003
Const HKEY_DYN_DATA = &H80000004

Public Enum HCle
    HKeyLocalMachine = 0
    HKeyCurrentUser = 1
    HKeyClassesRoot = 2
    HKeyUsers = 3
    HKeyDynamicData = 4
End Enum

'pour créer ou ouvrir une clé
Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" _
    (ByVal HKey As Long, _
     ByVal lpSubKey As String, _
     phkResult As Long) As Long
     
'pour lire une valeur
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" _
    (ByVal HKey As Long, _
     ByVal lpValueName As String, _
     ByVal lpReserved As Long, _
     lpType As Long, _
     lpData As Any, _
     lpcbData As Long) As Long

Public Function LireValeur(HK As HCle, Chemin As String, Valeur As String) As String
    Dim lng As Long
    Dim Buff As Long
    
    Buff = 0
    Buff = RegCreateKey(HKConvert(HK), Chemin, lng)
    If Buff = 0 Then RegQueryValueEx lng, Valeur, 0&, 1, 0&, Buff
    If Buff < 2 Then
        LireValeur = ""
        Exit Function
    End If
    LireValeur = String(Buff + 1, " ")
    RegQueryValueEx lng, Valeur, 0&, 1, ByVal LireValeur, Buff
    LireValeur = Left(LireValeur, Buff - 1)
End Function

Private Function HKConvert(ByVal HK As HCle) As Long
    If HK = 2 Then HKConvert = HKEY_CLASSES_ROOT
    If HK = 1 Then HKConvert = HKEY_CURRENT_USER
    If HK = 0 Then HKConvert = HKEY_LOCAL_MACHINE
    If HK = 3 Then HKConvert = HKEY_USERS
    If HK = 4 Then HKConvert = HKEY_DYN_DATA
End Function

Conclusion :


Dites moi ce ke vous en pensez et si ca marche chez vous

Codes Sources

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.