Partager via


Extension des menus contextuels

Cliquer avec le bouton droit sur un objet entraîne normalement l’affichage d’un menu contextuel. Ce menu contient une liste de commandes que l’utilisateur peut sélectionner pour effectuer différentes actions sur l’objet. Cette section est une introduction aux menus contextuels pour les objets de système de fichiers.

Des informations supplémentaires sont disponibles ici :

Menus contextuels pour les objets de système de fichiers

Lorsqu’un utilisateur clique avec le bouton droit sur un objet, tel qu’un fichier, qui s’affiche dans Windows Explorer ou sur le bureau, un menu contextuel s’affiche avec une liste de commandes. L’utilisateur peut ensuite effectuer une action sur le fichier, comme l’ouvrir ou le supprimer, en sélectionnant la commande appropriée.

Étant donné que les menus contextuels sont souvent utilisés pour la gestion des fichiers, l’interpréteur de commandes fournit un ensemble de commandes par défaut, telles que Couper et Copier, qui s’affichent dans le menu contextuel pour n’importe quel fichier. Notez que même si Ouvrir avec est une commande par défaut, elle n’est pas affichée pour certains types de fichiers standard, tels que .wav. L’illustration suivante de l’exemple de répertoire Mes documents, qui a également été utilisé comme exemple dans Personnalisation des icônes, montre un menu contextuel par défaut qui s’affiche en cliquant avec le bouton droit sur MyDocs4.xyz.

capture d’écran du menu contextuel par défaut pour les objets de système de fichiers

La raison pour laquelle MyDocs4.xyz affiche un menu contextuel par défaut est qu’il n’est pas membre d’un type de fichier inscrit. En revanche, .txt est un type de fichier inscrit. Si vous cliquez avec le bouton droit sur l’un des fichiers .txt, vous verrez à la place un menu contextuel avec deux commandes supplémentaires dans sa section supérieure : Ouvrir et Imprimer.

Capture d’écran du menu contextuel personnalisé pour les objets de système de fichiers

Une fois qu’un type de fichier est inscrit, vous pouvez étendre son menu contextuel avec des commandes supplémentaires. Elles s’affichent au-dessus des commandes par défaut lorsqu’un fichier de ce type fait l’objet d’un clic droit. Bien que la plupart des commandes ajoutées de cette façon soient courantes, telles que Imprimer ou Ouvrir, vous êtes libre d’ajouter n’importe quelle commande qu’un utilisateur peut trouver utile.

Pour étendre le menu contextuel d’un type de fichier, il suffit de créer une entrée de Registre pour chaque commande. Une approche plus sophistiquée consiste à implémenter un gestionnaire de menus contextuels, qui vous permet d’étendre le menu contextuel pour un type de fichier sur une base fichier par fichier. Pour plus d’informations, consultez Création de gestionnaires de menu contextuel.

Verbes du menu contextuel

Chaque commande du menu contextuel est identifiée dans le Registre par son verbe. Ces verbes sont les mêmes que ceux utilisés par ShellExecuteEx lors du lancement d’applications par programmation. Pour plus d’informations sur l’utilisation de ShellExecuteEx, consultez la discussion dans Lancement d’applications.

Un verbe est une chaîne de texte simple utilisée par l’interpréteur de commandes pour identifier la commande associée. Chaque verbe correspond à la chaîne de commande utilisée pour lancer la commande dans une fenêtre de console ou un fichier batch (.bat). Par exemple, le verbe ouvert lance normalement un programme pour ouvrir un fichier. Sa chaîne de commande ressemble généralement à ceci :

"My Program.exe" "%1"

« %1 » est l’espace réservé standard pour un paramètre de ligne de commande fourni avec le nom de fichier. Par instance, il peut spécifier une page particulière à afficher dans un affichage à onglets.

Notes

Si un élément de la chaîne de commande contient ou peut contenir des espaces, il doit être placé entre guillemets. Sinon, si l’élément contient un espace, il ne sera pas analysé correctement. Par instance, « Mon Program.exe » lance correctement l’application. Si vous utilisez My Program.exe, le système tente de lancer « My » avec « Program.exe » comme premier argument de ligne de commande. Vous devez toujours utiliser des guillemets avec des arguments tels que « %1 » qui sont développés en chaînes par l’interpréteur de commandes, car vous ne pouvez pas être certain que la chaîne ne contiendra pas d’espace.

 

Les verbes peuvent également être associés à une chaîne d’affichage , qui s’affiche dans le menu contextuel au lieu de la chaîne de verbe elle-même. Par exemple, la chaîne d’affichage pour openas est Open With. Comme les chaînes de menu normales, y compris un ampersand (&) dans la chaîne d’affichage permet la sélection au clavier de la commande.

Verbes canoniques

En général, les applications sont responsables de fournir des chaînes d’affichage localisées pour les verbes qu’elles définissent. Toutefois, pour fournir un degré d’indépendance linguistique, le système définit un ensemble standard de verbes couramment utilisés appelés verbes canoniques. Un verbe canonique peut être utilisé avec n’importe quelle langue, et le système génère automatiquement une chaîne d’affichage correctement localisée. Pour instance, la chaîne d’affichage du verbe ouvert est définie sur Ouvrir sur un système anglais et sur Öffnen sur un système allemand.

Les verbes canoniques sont les suivants :

Valeur Description
ouvrir Ouvre le fichier ou le dossier.
opennew Ouvre le fichier ou le dossier dans une nouvelle fenêtre.
print Imprime le fichier.
explorer Ouvre windows Explorer avec le dossier sélectionné.
trouver Ouvre la boîte de dialogue Recherche Windows avec le dossier défini comme emplacement de recherche par défaut.
openas Ouvre la boîte de dialogue Ouvrir avec .
properties Ouvre la feuille de propriétés de l’objet.

 

Le verbe printto est également canonique mais n’est jamais affiché. Il permet à l’utilisateur d’imprimer un fichier en le faisant glisser vers un objet d’imprimante.

Verbes étendus

Lorsque l’utilisateur clique avec le bouton droit sur un objet, le menu contextuel contient tous les verbes normaux. Toutefois, il peut y avoir des commandes que vous souhaitez prendre en charge, mais que vous n’avez pas affichées dans chaque menu contextuel. Par exemple, vous pouvez avoir des commandes qui ne sont pas couramment utilisées ou qui sont destinées aux utilisateurs expérimentés. Pour cette raison, vous pouvez également définir un ou plusieurs verbes étendus. Ces verbes sont également des chaînes de caractères et sont similaires aux verbes normaux. Ils se distinguent des verbes normaux par la façon dont ils sont inscrits. Pour accéder aux commandes associées aux verbes étendus, l’utilisateur doit cliquer avec le bouton droit sur un objet tout en appuyant sur la touche MAJ. Les verbes étendus seront ensuite affichés avec les verbes normaux.

Extension du menu contextuel pour un type de fichier

Le moyen le plus simple d’étendre le menu contextuel d’un type de fichier consiste à utiliser le Registre. Pour ce faire, ajoutez une sous-clé Shell sous la clé pour le ProgID de l’application associée au type de fichier. Si vous le souhaitez, vous pouvez définir un verbe par défaut pour le type de fichier en faisant de celui-ci la valeur par défaut de la sous-clé Shell .

Le verbe par défaut s’affiche en premier dans le menu contextuel. Son objectif est de fournir à l’interpréteur de commandes un verbe qu’il peut utiliser lorsque ShellExecuteEx est appelé, mais qu’aucun verbe n’est spécifié. L’interpréteur de commandes ne sélectionne pas nécessairement le verbe par défaut lorsque ShellExecuteEx est utilisé de cette façon. Pour les versions Shell 5.0 et ultérieures, disponibles sur les systèmes Windows 2000 et versions ultérieures, l’interpréteur de commandes utilise le premier verbe disponible de la liste suivante. Si aucun n’est disponible, l’opération échoue.

  • Verbe ouvert
  • Verbe par défaut
  • Premier verbe dans le Registre
  • Verbe openwith

Pour les versions de Shell antérieures à la version 5.0, omettez le troisième élément.

Sous la sous-clé Shell , créez une sous-clé pour chaque verbe que vous souhaitez ajouter. Chacune de ces sous-clés aura une valeur REG_SZ définie sur la chaîne d’affichage du verbe. Vous pouvez omettre la chaîne d’affichage pour les verbes canoniques, car le système affiche automatiquement une chaîne correctement localisée. Si vous omettez la chaîne d’affichage pour les verbes non canoniques, la chaîne de verbe s’affiche. Pour chaque sous-clé de verbe, créez une sous-clé de commande avec la valeur par défaut définie sur la chaîne de commande.

L’illustration suivante montre un menu contextuel pour le type de fichier .myp utilisé dans Types de fichiers et Personnalisation des icônes. Il a maintenant des verbes ouverts, doit, print et printto dans son menu contextuel, avec doit comme verbe par défaut. Le menu contextuel ressemble à ceci.

capture d’écran du menu contextuel personnalisé

Les entrées de Registre utilisées pour étendre le menu contextuel illustré dans l’illustration précédente sont les suivantes :

HKEY_CLASSES_ROOT
   .myp
      (Default) = MyProgram.1
   MyProgram.1
      (Default) = MyProgram Application
      Shell
         (Default) = doit
         open
            command
               (Default) = C:\MyDir\MyProgram.exe "%1"
         doit
            (Default) = &Do It
            command
               (Default) = C:\MyDir\MyProgram.exe /d "%1"
         print
            command
               (Default) = C:\MyDir\MyProgram.exe /p "%1"
         printto
            command
               (Default) = C:\MyDir\MyProgram.exe /p "%1" "%2" %3 %4

Bien que la commande Open With se trouve au-dessus du premier séparateur, elle est automatiquement créée par le système et ne nécessite pas d’entrée de Registre. Le système crée automatiquement des noms d’affichage pour les verbes canoniques ouverts et imprimés. Comme doit n’est pas un verbe canonique, un nom d’affichage«& Do It » lui est attribué, qui peut être sélectionné en appuyant sur la touche D. Le verbe printto n’apparaît pas dans le menu contextuel, mais il permet à l’utilisateur d’imprimer des fichiers en les déposant sur une icône d’imprimante. Dans cet exemple, %1 représente le nom du fichier et %2 le nom de l’imprimante.

Les verbes peuvent être supprimés via les paramètres de stratégie en ajoutant une valeur SuppressionPolicy à la clé du verbe. Définissez la valeur de SuppressionPolicy sur l’ID de stratégie. Si la stratégie est activée, le verbe et l’entrée de menu contextuel associée sont supprimés. Pour connaître les valeurs d’ID de stratégie possibles, consultez l’énumération RESTRICTIONS .

Extension du menu contextuel pour les objets shell prédéfinis

De nombreux objets Shell prédéfinis ont des menus contextuels qui peuvent être étendus. Inscrivez la commande de la même manière que vous inscrivez les types de fichiers classiques, mais utilisez le nom de l’objet prédéfini comme nom de type de fichier.

Vous trouverez la liste des objets prédéfinis dans la section Objets shell prédéfinis de La création de gestionnaires d’extension shell. Les objets Shell prédéfinis dont les menus contextuels peuvent être étendus en ajoutant des verbes dans le Registre sont marqués dans le tableau avec le mot « Verbe ».

Inscription d’une application pour gérer des types de fichiers arbitraires

Les sections précédentes de ce document ont expliqué comment définir des éléments de menu contextuel pour un type de fichier particulier. Entre autres choses, la définition du menu contextuel vous permet de spécifier la façon dont l’application associée ouvre un membre du type de fichier. Toutefois, comme indiqué dans Types de fichiers, les applications peuvent également inscrire une procédure par défaut distincte à utiliser lorsqu’un utilisateur tente d’utiliser votre application pour ouvrir un type de fichier que vous n’avez pas associé à l’application. Cette rubrique est abordée ici, car vous inscrivez la procédure par défaut de la même façon que vous inscrivez des éléments de menu contextuel.

La procédure par défaut remplit deux objectifs de base. L’une consiste à spécifier la façon dont votre application doit être appelée pour ouvrir un type de fichier arbitraire. Vous pouvez, par instance, utiliser un indicateur de ligne de commande pour indiquer qu’un type de fichier inconnu est en cours d’ouverture. L’autre objectif est de définir les différentes caractéristiques d’un type de fichier, telles que les éléments de menu contextuel et l’icône. Si un utilisateur associe votre application à un type de fichier supplémentaire, ce type aura ces caractéristiques. Si le type de fichier supplémentaire a été précédemment associé à une autre application, ces caractéristiques remplacent les éléments d’origine.

Pour inscrire la procédure par défaut, placez les mêmes clés de Registre que vous avez créées pour le ProgID de votre application sous la sous-clé de HKEY_CLASSES_ROOT\Applications. Vous pouvez également inclure une valeur FriendlyAppName pour fournir au système un nom convivial pour votre application. Le nom convivial de l’application peut également être extrait de son fichier exécutable, mais uniquement si la valeur FriendlyAppName est absente. Le fragment de Registre suivant montre un exemple de procédure par défaut pour MyProgram.exe qui définit un nom convivial et plusieurs éléments de menu contextuel. Les chaînes de commande incluent l’indicateur /a pour informer l’application qu’elle ouvre un type de fichier arbitraire. Si vous incluez une sous-clé DefaultIcon , vous devez utiliser une icône générique.

HKEY_CLASSES_ROOT
   Applications
      MyProgram.exe
         FriendlyAppName = Friendly Name
         shell
            open
               command
                  (Default) = C:\MyDir\MyProgram.exe /a "%1"
            print
               command
                  (Default) = C:\MyDir\MyProgram.exe /a /p "%1"
            printto
               command
                  (Default) = C:\MyDir\MyProgram.exe /a /p "%1" "%2" %3 %4

Extension du nouveau sous-menu

Lorsqu’un utilisateur ouvre le menu Fichier dans Windows Explorer, la première commande est Nouveau. La sélection de cette commande affiche un sous-menu. Par défaut, il contient deux commandes, Dossier et Raccourci, qui permettent aux utilisateurs de créer des sous-dossiers et des raccourcis. Ce sous-menu peut être étendu pour inclure des commandes de création de fichier pour n’importe quel type de fichier.

Pour ajouter une commande de création de fichier au sous-menu Nouveau , un type de fichier doit être associé aux fichiers de votre application. Incluez une sous-clé ShellNew sous la clé de l’extension de nom de fichier. Lorsque la commande Nouveau du menu Fichier est sélectionnée, l’interpréteur de commandes l’ajoute au sous-menu Nouveau. La chaîne d’affichage de la commande sera la chaîne descriptive affectée au ProgID du programme.

Attribuez une ou plusieurs valeurs de données à la sous-clé ShellNew pour spécifier la méthode de création de fichier. Les valeurs disponibles suivent.

Valeur Description
Commande Exécute une application. Il s’agit d’une valeur REG_SZ spécifiant le chemin d’accès de l’application à exécuter. Par exemple, vous pouvez le définir pour lancer un Assistant.
Données Crée un fichier contenant des données spécifiées. Les données sont une valeur REG_BINARY avec les données du fichier. Les données sont ignorées si NullFile ou FileName est spécifié.
FileName Crée un fichier qui est une copie d’un fichier spécifié. FileName est une valeur REG_SZ , définie sur le chemin complet du fichier à copier.
NullFile Crée un fichier vide. Une valeur n’est pas attribuée à NullFile. Si NullFile est spécifié, les valeurs Data et FileName sont ignorées.

 

L’illustration suivante montre le sous-menu Nouveau pour le type de fichier .myp utilisé comme exemple dans Types de fichiers et Personnalisation des icônes. Il a maintenant une commande, MyProgram Application. Lorsqu’un utilisateur sélectionne MyProgram Application dans le nouveau sous-menu, l’interpréteur de commandes crée un fichier nommé « New MyProgram Application.myp » et le transmet à MyProgram.exe.

capture d’écran du menu nouveau personnalisé

L’entrée du Registre se présente désormais comme suit :

HKEY_CLASSES_ROOT
   .myp
      (Default) = MyProgram.1
      MyProgram.1
         ShellNew
            NullFile
   MyProgram.1
      (Default) = MyProgram Application
      DefaultIcon
         (Default) = C:\MyDir\MyProgram.exe,2
      Shell
         (Default) = doit
         open
            command
               (Default) = C:\MyDir\MyProgram.exe "%1"
         doit
            (Default) = &Do It
            command
               (Default) = C:\MyDir\MyProgram.exe /d "%1"
         print
            command
               (Default) = C:\MyDir\MyProgram.exe /p "%1"
         printto
            command
               (Default) = C:\MyDir\MyProgram.exe /p "%1" "%2" %3 %4