Enregistrement de gestionnaires d’extensions d’environnement

Un objet gestionnaire d’extension Shell doit être inscrit avant que l’interpréteur de commandes puisse l’utiliser. Cette rubrique est une présentation générale de l’inscription d’un gestionnaire d’extensions Shell.

Chaque fois que vous créez ou modifiez un gestionnaire d’extensions Shell, il est important d’informer le système que vous avez apporté une modification. Pour ce faire, appelez SHChangeNotify, en spécifiant l’événement SHCNE_ASSOCCHANGED . Si vous n’appelez pas SHChangeNotify, la modification risque de ne pas être reconnue tant que le système n’est pas redémarré.

Certains facteurs supplémentaires s’appliquent aux systèmes Windows 2000. Pour plus d’informations, consultez la section Inscription des gestionnaires d’extensions shell sur les systèmes Windows 2000 .

Comme pour tous les objets COM (Component Object Model), vous devez créer un GUID pour le gestionnaire à l’aide d’un outil tel que Guidgen.exe, fourni avec le Kit de développement logiciel (SDK) Windows. Créez une sous-clé sous HKEY_CLASSES_ROOT\CLSID dont le nom est la forme de chaîne de ce GUID. Étant donné que les gestionnaires d’extension Shell sont des serveurs in-process, vous devez également créer une sous-clé InprocServer32 sous cette sous-clé GUID avec la valeur (Par défaut) définie sur le chemin d’accès de la DLL du gestionnaire. Utilisez le modèle de thread d’appartement. En voici un exemple :

HKEY_CLASSES_ROOT
   CLSID
      {00021500-0000-0000-C000-000000000046}
         InprocServer32
            (Default) = %windir%\System32\Example.dll
            ThreadingModel = Apartment

Chaque fois que l’interpréteur de commandes effectue une action qui peut impliquer un gestionnaire d’extensions Shell, il vérifie la sous-clé de Registre appropriée. La sous-clé sous laquelle un gestionnaire d’extension est inscrit contrôle quand il sera appelé. Par instance, il est courant d’avoir un gestionnaire de menu contextuel appelé lorsque l’interpréteur de commandes affiche un menu contextuel pour un membre d’un type de fichier. Dans ce cas, le gestionnaire doit être inscrit sous la sous-clé ProgID du type de fichier.

Cette rubrique traite des sujets suivants :

Noms des gestionnaires

Pour activer un gestionnaire d’extension Shell, créez une sous-clé avec le nom de la sous-clé de gestionnaire (voir ci-dessous) sous la sous-clé ShellEx du ProgID (pour les types de fichiers) ou du nom du type d’objet Shell (pour predefined_shell_objects).

Par exemple, si vous souhaitez inscrire un gestionnaire d’extension de menu contextuel pour MyProgram.1, commencez par créer la sous-clé suivante :

HKEY_CLASSES_ROOT
   MyProgram.1
      ShellEx
         ContextMenuHandlers

Pour les gestionnaires suivants, créez une sous-clé sous la sous-clé « Handler Subkey name » nommée en tant que version de chaîne de l’identificateur de classe (CLSID) de l’extension Shell. Plusieurs extensions peuvent être inscrites sous le nom de la sous-clé du gestionnaire en créant plusieurs sous-clés.

Handler Interface Nom de la sous-clé du gestionnaire
Gestionnaire du fournisseur de colonnes IColumnProvider ColumnHandlers
Gestionnaire de menu contextuel IContextMenu ContextMenuHandlers
Gestionnaire de copyhook ICopyHook CopyHookHandlers
Gestionnaire de glisser-déplacer IContextMenu DragDropHandlers
Gestionnaire de feuille de propriétés IShellPropSheetExt PropertySheetHandlers

 

Pour les gestionnaires suivants, la valeur par défaut de la clé « Nom de sous-clé du gestionnaire » est la version de chaîne du CLSID de l’extension Shell. Une seule extension peut être inscrite pour ces gestionnaires.

Handler Interface Nom de la sous-clé du gestionnaire
Gestionnaire de données Idataobject Gestionnaire de données
Gestionnaire de suppression IDropTarget DropHandler
Gestionnaire d’icônes IExtractIconA/W IconHandler
Gestionnaire d’images miniatures IThumbnailProvider {E357FCCD-A995-4576-B01F-234630154E96}
Gestionnaire d'info-bulle IQueryInfo {00021500-0000-0000-C000-00000000046}
Lien shell (ANSI) IShellLinkA {000214EE-0000-0000-C000-00000000046}
Lien de l’interpréteur de commandes (UNICODE) IShellLinkW {000214F9-0000-0000-C000-00000000046}
Stockage structuré IStorage {0000000B-0000-0000-C000-00000000046}
Métadonnées IPropertySetStorage PropertyHandler
Épingler au menu Démarrer IStartMenuPinnedList {a2a9545d-a0c2-42b4-9708-a0b2badd77c8}
Épingler à la barre des tâches {90AA3A4E-1CBA-4233-B8BB-535773D48449}

 

Les sous-clés spécifiées pour ajouter Épingler au menu Démarrer et Épingler à la barre des tâches au menu contextuel d’un élément sont requises uniquement pour les types de fichiers qui incluent l’entrée IsShortCut .

Objets shell prédéfinis

L’interpréteur de commandes définit des objets supplémentaires sous HKEY_CLASSES_ROOT qui peuvent être étendus de la même façon que les types de fichiers. Par exemple, pour ajouter un gestionnaire de feuilles de propriétés pour tous les fichiers, vous pouvez vous inscrire sous la sous-clé PropertySheetHandlers .

HKEY_CLASSES_ROOT
   *
      shellex
         PropertySheetHandlers

Le tableau suivant indique les différentes sous-clés de HKEY_CLASSES_ROOT sous lesquelles les gestionnaires d’extensions peuvent être inscrits. Notez que de nombreux gestionnaires d’extensions ne peuvent pas être inscrits sous toutes les sous-clés répertoriées. Pour plus d’informations, consultez la documentation du gestionnaire spécifique.

Sous-clé Description Gestionnaires possibles
* Tous les fichiers Menu contextuel, Feuille de propriétés, Verbes (voir ci-dessous)
AllFileSystemObjects Tous les fichiers et dossiers de fichiers Menu contextuel, Feuille de propriétés, Verbes
Folder Tous les dossiers Menu contextuel, Feuille de propriétés, Verbes
Directory Dossiers de fichiers Menu contextuel, Feuille de propriétés, Verbes
Répertoire\Arrière-plan Arrière-plan du dossier de fichiers Menu contextuel uniquement
DesktopBackground Arrière-plan du bureau (Windows 7 et versions ultérieures) Menu contextuel, Verbes
Disque Tous les lecteurs dans MyComputer, tels que « C:\ » Menu contextuel, Feuille de propriétés, Verbes
Réseau Tout le réseau (sous Mes emplacements réseau) Menu contextuel, Feuille de propriétés, Verbes
Network\Type\ # Tous les objets de type # (voir ci-dessous) Menu contextuel, Feuille de propriétés, Verbes
Netshare Tous les partages réseau Menu contextuel, Feuille de propriétés, Verbes
NetServer Tous les serveurs réseau Menu contextuel, Feuille de propriétés, Verbes
network_provider_name Tous les objets fournis par le fournisseur de réseau « network_provider_name » Menu contextuel, Feuille de propriétés, Verbes
Imprimantes Toutes les imprimantes Menu contextuel, Feuille de propriétés
Audiocd CD audio dans le lecteur de CD Verbes uniquement
DVD Lecteur DE DVD (Windows 2000) Menu contextuel, Feuille de propriétés, Verbes

 

Notes

  • Le menu contextuel d’arrière-plan du dossier de fichiers est accessible en cliquant avec le bouton droit dans un dossier de fichiers, mais pas sur le contenu du dossier.
  • Les « verbes » sont des commandes spéciales inscrites sous HKEY_CLASSES_ROOT\ verbede l’interpréteur\de sous-clés\.
  • PourType de\#réseau\, « # » est un code de type de fournisseur réseau en décimal. Le code de type de fournisseur de réseau est le mot haut d’un type de réseau. La liste des types de réseau est donnée dans le fichier d’en-tête Winnetwk.h (valeurs WNNC_NET_*). Par exemple, WNNC_NET_SHIVA est 0x00330000, de sorte que la sous-clé de type correspondante est HKEY_CLASSES_ROOT\type\réseau\51.
  • « network_provider_name » est un nom de fournisseur de réseau tel que spécifié par WNetGetProviderName, avec les espaces convertis en traits de soulignement. Par exemple, si le fournisseur réseau Microsoft Networking est installé, son nom de fournisseur est « Microsoft Windows Network » et le network_provider_name correspondant est Microsoft_Windows_Network.

Exemple d’inscription de gestionnaire d’extensions

Pour activer un gestionnaire particulier, créez une sous-clé sous la sous-clé de type de gestionnaire d’extension avec le nom du gestionnaire. L’interpréteur de commandes n’utilise pas le nom du gestionnaire, mais il doit être différent de tous les autres noms sous cette sous-clé de type. Définissez la valeur par défaut de la sous-clé name sur la forme de chaîne du GUID du gestionnaire.

L’exemple suivant illustre les entrées de Registre qui activent les gestionnaires de menu contextuel et d’extension de feuille de propriétés, à l’aide d’un exemple de type de fichier .myp.

HKEY_CLASSES_ROOT
   .myp
      (Default) = MyProgram.1
   CLSID
      {00000000-1111-2222-3333-444444444444}
         InProcServer32
            (Default) = C:\MyDir\MyCommand.dll
            ThreadingModel = Apartment
      {11111111-2222-3333-4444-555555555555}
         InProcServer32
            (Default) = C:\MyDir\MyPropSheet.dll
            ThreadingModel = Apartment
   MyProgram.1
      (Default) = MyProgram Application
      Shellex
         ContextMenuHandler
            MyCommand
               (Default) = {00000000-1111-2222-3333-444444444444}
         PropertySheetHandlers
            MyPropSheet
               (Default) = {11111111-2222-3333-4444-555555555555}

Initialisation des gestionnaires d’extensions shell