Numéro d'article: 461263 - Dernière mise à jour: mercredi 25 février 2004 - Version: 2.0 INF: Comment crée une association dans la Registry.Ancien nº de publication de cet article : F11263 Résumé
QUESTION: Comment crée une association entre une extension de fichier et une application avec Visual Basic ? REPONSE: Cette association est crée habituellement par le Gestionnaire de Fichiers de Windows, dans le menu Fichier/Associer. Les informations de cette association sont stockées dans la registry de Windows. Le fichier contenant les informations est nommé REG.DAT et l'utilitaire REGEDIT permet de les manipuler. En lanç ant REGEDIT avec l'option /V (REGEDIT /V), il est possible de voir l'arborescence nécéssaire à une association. Celle-ci doit être comme suit : |.ext = ClasseApplication | |ClasseApplication = Description de l'application | +- shell | +- open | | | +- command = \Chemin\de\l\application.exe %1 | | +- command = \Chemin\de\l\application.exe %1 /OptionPrint Les mots importants sont shell, open, print et command. Ceux-ci doivent être obligatoirement présent. Le reste des informations est paramétrable. Remarques: - '%1' correspond à un nom de fichier qui sera associé à l'application lors de l'association. - '/OptionPrint' est un exemple, cette option peut être quelconque, et permet de différencier le mode Open du mode Print. Il est possible de manipuler les informations de la Registry de Windows avec des API. Il en existe 7 prévues à cet effet. Celles ci sont documentées dans le fichier d'aide sur les API de Windows (3.1 SDK HELP) et elles sont décritent avec Visual Basic dans le programme d'exemple suivant. EXEMPLE DE CREATION D'UNE ASSOCIATION: 1) Fonction API et définition de constantes: ' *** Fontions de manipulation des clés (Keys) de la Registry. Declare Function RegCloseKey Lib "Shell" (ByVal hKey As Long) As Long Declare Function RegCreateKey Lib "Shell" (ByVal hKey As Long, ByVal lpszSubKey As String, lphkResult As Long) As Long Declare Function RegDeleteKey Lib "Shell" (ByVal hKey As Long, ByVal lpszSubKey As String) As Long Declare Function RegEnumKey Lib "Shell" (ByVal hKey As Long, ByVal iSubKey As Long, ByVal lpszBuffer As String, ByVal cbBuffer As Long) As Long Declare Function RegOpenKey Lib "Shell" (ByVal hKey As Long, ByVal lpszSubKey As String, lphkResult As Long) As Long Declare Function RegQueryValue Lib "Shell" (ByVal hKey As Long, ByVal lpszSubKey As String, ByVal lpszValue As String, lpcb As Long) As Long Declare Function RegSetValue Lib "Shell" (ByVal hKey As Long, ByVal lpszSubKey As String, ByVal fdwType As Long, ByVal lpszValue As String, ByVal cbValue As Long) As Long ' *** Constante de la Registry. Const HKEY_CLASSES_ROOT = 1& Const REG_SZ = 1& Const ERROR_SUCCESS = 0& Const ERROR_BADDB = 1& Const ERROR_BADKEY = 2& Const ERROR_CANTOPEN = 3& Const ERROR_CANTREAD = 4& Const ERROR_CANTWRITE = 5& Const ERROR_OUTOFMEMORY = 6& Const ERROR_INVALID_PARAMETER = 7& Const ERROR_ACCESS_DENIED = 8& 2) Un exemple de fonction créant l'arborescence : Function NouvelleAssociation (ByVal sExtension As String, ByVal sClasse As String, ByVal sDescription As String, ByVal sCommandeOpen As String, ByVal sCommandePrint As String) As Long Dim hDescription As Long Dim hShell As Long, hOpen As Long, hPrint As Long Dim Res As Long Res = RegSetValue(HKEY_CLASSES_ROOT, sExtension, REG_SZ, sClasse, Len(sClasse)) If Res <> ERROR_SUCCESS Then NouvelleAssociation = Res: Exit Function Res = RegSetValue(HKEY_CLASSES_ROOT, sClasse, REG_SZ, sDescription, Len(sDescription)) If Res <> ERROR_SUCCESS Then NouvelleAssociation = Res: Exit Function Res = RegSetValue(HKEY_CLASSES_ROOT, sClasse & "\shell\open\command", REG_SZ, sCommandeOpen, Len(sCommandeOpen)) If Res <> ERROR_SUCCESS Then NouvelleAssociation = Res: Exit Function Res = RegSetValue(HKEY_CLASSES_ROOT, sClasse & "\shell\print\command", REG_SZ, sCommandePrint, Len(sCommandePrint)) If Res <> ERROR_SUCCESS Then NouvelleAssociation = Res: Exit Function End Function 3) Ceci va crée une association entre les fichiers d'extention '.tst' et l'application Bloc-Note (NotePad.EXE) : Dim Res As Long Res = NouvelleAssociation(".tst", "TESTREGEDIT", "TEST AVEC REGEDIT", "NotePad.Exe %1", "NotePad.Exe /P %1") If Res <> ERROR_SUCCESS Then MsgBox "L'association à échoué.": Exit Sub Le résultat dans la registry est le suivant : |.tst = TESTREGEDIT | |TESTREGEDIT = TEST AVEC REGEDIT | +- shell | +- open | | | +- command = NotePad.Exe %1 | | +- command = NotePad.Exe /P %1 L'association est prête. Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT. |


Retour au début
