Help and Support

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
Agrandir tout | Réduire tout

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
|
+- print
|
+- 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
|
+- print
|
+- command = NotePad.Exe /P %1


L'association est prête.

Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual Basic 2.0 Édition professionnelle
  • Microsoft Visual Basic 3.0 Édition professionnelle
Mots-clés : 
KB461263
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.
Retired KB ArticleExclusion de responsabilité concernant les contenus obsolètes dans la Base de connaissances
Cet article concerne des produits pour lesquels Microsoft n'offre plus de support. Il est par conséquent fourni « en l'état » et ne sera plus mis à jour.