Associer un type de fichier à votre programme

Contenu du snippet

Comme apparement le sujet à été traité qu'inversement, c'est à dire trouver le programme associé à un fichier, je vous propose aujourd'hui une méthode pour associer un fichier à votre programme.

Enum HKEYs
' Enumération des HKEYs de la base de registre
HKEY_CLASSES_ROOT = 0
HKEY_LOCAL_MACHINE = 1
HKEY_CURRENT_USER = 2
End Enum

Public Sub Ecrit(HKEY As HKEYs, Endroit As String, Valeur As String)
' Pour créer ou écrire une clé
' EX: Ecrit HKEY_CURRENT_USER, "MonProg\MaClé", "Valeur"
Dim WSHShell
Set WSHShell = CreateObject("WScript.Shell")
WSHShell.RegWrite HK(HKEY) & Endroit, Valeur
End Sub

Public Function HK(HKEY As HKEYs) As String
' Convertion des HKEYs de la base de registre
Select Case HKEY
Case 0: HK = "HKCR\"
Case 1: HK = "HKLM\"
Case 2: HK = "HKCU\"
End Select
End Function

Public Sub Associer(Extension As String, Description As String)
If Right(App.Path, 1) = "\" Then r$ = "" Else r$ = "\"
' Pour associer un fichier à un programme
' EX: Associer "jpg", "Image JPEG"
' [!] Ne pas mettre de point devant l'extension

' Crée une nouvelle extension et un nouveau type de document
' Crée une opération "Ouvrir"
Ecrit HKEY_CLASSES_ROOT, "ZiViewer." & Extension & "\", Description
Ecrit HKEY_CLASSES_ROOT, "ZiViewer." & Extension & "\DefaultIcon\", App.Path & r$ & "icone " & Extension & ".ico"
Ecrit HKEY_CLASSES_ROOT, "ZiViewer." & Extension & "\Shell\", "Open"
Ecrit HKEY_CLASSES_ROOT, "ZiViewer." & Extension & "\Shell\Open\Command\", """" & App.Path & App.EXEName & ".exe" & """" & " " & """" & " %1" & """"
' NOTE : les 4 guillemets dans le code ("""") donnent a l'affichage un seul guillemet (")
' On s'en sert ici pour encadrer de guillemets le nom et chemin du prog ainsi que ceux du fichier appelant (%1)
' Si on ne les met pas, il y a des problèmes si le chemin d'accés du prog et/ou du fichier contient des espaces
Ecrit HKEY_CLASSES_ROOT, "." & Extension & "\", "ZiViewer." & Extension & ""
' Si tout s'est bien passé : message de confirmation
MsgBox "Association effectuée avec succès !"
End Sub

Bien sûr, il faut remplacer "ZiViewer" par le nom de votre programme. Un coup de Regedit et admirez le résultat !!!

Maintenant, si vous ne voulez que ajouter une option "Ouvrir avec..." avec votre programme, il suffit juste de :

Public Sub AjoutOption(Extension As String, Type As String)
' Pour rajouter une option "Ouvrir avec..."
' EX: AjoutOption "jpg", "jpegfile"
' [!] Ne pas mettre de point devant l'extension
Ecrit HKEY_CLASSES_ROOT, Type & "\Shell\Modif\", "Ouvrir avec ZiViewer"
Ecrit HKEY_CLASSES_ROOT, Type & "\Shell\Modif\Command\", """" & App.Path & App.EXEName & ".exe" & """" & " " & """" & " %1" & """"
' Si tout s'est bien passé : message de confirmation
MsgBox "Ajout effectué avec succès !"
End Sub

Dans le "dossier" shell, on en crée un nouveau, ici modif, dont le nom peut être différent (et à intérrêt de l'être pour éviter les conflits entre logiciels)
Ici, il vous faut connaitre le type du fichier. Or d'un logiciel à un autre (notamment pour les formats publics genres format graphiques gif, jpg, bmp...) le type de fichier peut être différent : Microsoft Photo Editor avec les fichiers JPEG donne le type "jpegfile" alors que paint avec un fichier Bitmap donne le type "paint.picture"

Pour connaitre le type d'un format, il suffit de récupérer le valeur suivante :
type = Reg.Lit(HKEY_CLASSES_ROOT, "." & EXTENSION_DONT_ON_RECHERCHE_LE_TYPE & "\")

Si vous voulez ajouter une option à un dossier (style winamp qui crée une playlist avec tous les fichiers du dossier), le type est "Folder" ou "Directory" (dépend apparemment de la version de Windows).

Pour savoir si un fichier à déjà l'option "ouvrir avec votre logiciel" :
deja = Reg.Lit(HKEY_CLASSES_ROOT, TYPE_DE_FICHIER & "\shell\" & NOM_DU_DOSSIER & "\command\")

Si vous avez des questions ou si le code n'est pas assez clair, n'hésitez pas à le dire en passant par les commentaires en bas de cette page !

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.