Partager via


Développement des menus contextuels

Cliquer avec le bouton droit sur un objet provoque 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 présente les 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 l’Explorateur Windows ou sur le bureau, un menu contextuel s’affiche avec une liste de commandes. L’utilisateur peut ensuite effectuer une action sur le fichier, telle que l’ouverture ou la suppression, en sélectionnant la commande appropriée.

Étant donné que les menus contextuels sont souvent utilisés pour la gestion des fichiers, il Shell fournit un ensemble de commandes par défaut, telles que Couper et Copier, qui apparaissent dans le menu contextuel de n’importe quel fichier. Notez que même si Open With 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 La personnalisation des icônes, affiche un menu contextuel par défaut affiché 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 plutôt 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. Ils sont affichés au-dessus des commandes par défaut quand un fichier de ce type est cliqué avec le bouton droit. Bien que la plupart des commandes ajoutées de cette façon soient courantes, telles que Print ou Open, vous êtes libre d’ajouter n’importe quelle commande qu’un utilisateur peut trouver utile.

Tout ce qui est nécessaire pour étendre le menu contextuel d’un type de fichier consiste à 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 d’un type de fichier sur une base de fichier par fichier. Pour plus d’informations, consultez Création de gestionnaires de menus contextuels.

Verbes du menu contextuel

Chaque commande du menu contextuel est identifiée dans le Registre par son verb. Ces verbes sont identiques à ceux utilisés par ShellExecuteEx lors du lancement d’applications par programmation. Pour plus d’informations sur l’utilisation de ShellExecuteEx, consultez la discussion sur le lancement d’applications.

Un verb est une chaîne de texte simple utilisée par le Shell pour identifier la commande associée. Chacun verb 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, ouvrirverb lance normalement un programme pour ouvrir un fichier. Sa chaîne de commande ressemble généralement à ceci :

"My Program.exe" "%1"

«%1» est le symbole ou l’indicateur standard pour un paramètre de ligne de commande fourni avec le nom de fichier. Par exemple, il peut spécifier une page particulière à afficher en mode tabulation.

Remarque

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 n’analyse pas correctement. Par exemple, « Mon Program.exe» lance correctement l’application. Si vous utilisez Mon 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 le Shell, car vous ne pouvez pas être certain que la chaîne ne contiendra pas d’espace.

 

Les verbes peuvent également avoir une chaîne d’affichage associée, qui est affichée dans le menu contextuel au lieu de la verb chaîne elle-même. Par exemple, la chaîne d’affichage pour openas est Open With. Comme les chaînes de menu normales, inclure un ampersand (&) dans la chaîne d’affichage permet de sélectionner la commande via le clavier.

Verbes canoniques

En général, les applications sont chargées de fournir des chaînes d’affichage localisées pour les verbes qu’elles définissent. Toutefois, pour fournir un degré d’indépendance du langage, le système définit un ensemble standard de verbes couramment utilisés appelés verbes canoniques. Un canonique verb peut être utilisé avec n’importe quelle langue et le système génère automatiquement une chaîne d’affichage localisée correctement. Par exemple, la chaîne d’affichage de openverb est définie comme Open dans un système en anglais et comme Öffnen dans un système en allemand.

Les verbes canoniques sont les suivants :

Valeur Descriptif
ouvrir Ouvre le fichier ou le dossier.
opennew Ouvre le fichier ou le dossier dans une nouvelle fenêtre.
imprimer Imprime le fichier.
explorer Ouvre l’Explorateur Windows 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 .
Propriétés Ouvre la feuille de propriétés de l’objet.

 

Le printto verb 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 qui n’ont pas été 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 sont distingués des verbes normaux par la façon dont ils sont inscrits. Pour avoir accès aux commandes associées à des verbes étendus, l’utilisateur doit cliquer avec le bouton droit sur un objet en appuyant sur la touche Maj. Les verbes étendus seront ensuite affichés avec les verbes normaux.

Extension du menu contextuel d’un type de fichier

La façon la plus simple d’étendre le menu contextuel d’un type de fichier est avec le Registre. Pour ce faire, ajoutez une Shell sous-clé sous la clé du ProgID de l’application associée au type de fichier. Si vous le souhaitez, vous pouvez définir une valeur par défaut verb pour le type de fichier en définissant cette valeur comme celle de la sous-clé Shell par défaut.

La valeur par défaut verb s’affiche en premier dans le menu contextuel. Son objectif est de fournir à Shell un verb qu'il peut utiliser lorsque ShellExecuteEx est appelé, mais qu'aucun verb n'est spécifié. Le Shell paramètre ne sélectionne pas nécessairement la valeur par défaut verb lorsque ShellExecuteEx est utilisé de cette façon. Pour Shellles versions 5.0 et ultérieures, trouvées sur les systèmes Windows 2000 et versions ultérieures, Shell prend le premier verb disponible dans la liste suivante. Si aucune n’est disponible, l’opération échoue.

  • Ouverture verb
  • Valeur par défaut verb
  • Le premier verb dans le registre
  • L'option Ouvrir avec verb

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

Sous la Shell sous-clé, créez une sous-clé pour chaque verb que vous souhaitez ajouter. Chacune de ces sous-clés aura une valeur REG_SZ définie sur la verbchaîne d’affichage de '. Vous pouvez omettre la chaîne d’affichage pour les verbes canoniques, car le système affiche automatiquement une chaîne localisée correctement. Si vous omettez la chaîne d’affichage pour les verbes noncanoniques, la verb chaîne s’affiche. Pour chaque verb sous-clé, 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 les types de fichiers et la personnalisation des icônes. Il a maintenant les verbes ouvrir, exécuter, imprimer et imprimer vers dans son menu contextuel, avec exécuter comme valeur par défaut verb. Le menu contextuel ressemble à ceci.

capture d’écran du menu contextuel personnalisé

Les entrées de Registre utilisées pour étendre le menu contextuel indiqué 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 créée automatiquement 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. Étant donné que `doit` n’est pas un canonique verb, il est affecté à un nom d'affichage, "&Do It", qui peut être sélectionné en appuyant sur la touche D. La commande d'impression verb n’apparaît pas dans le menu contextuel, mais son inclusion 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 de 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é verb. Définissez la valeur de SuppressionPolicy sur l’ID de stratégie. Si la stratégie est activée, le verb et l'entrée associée du menu contextuel 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 prédéfinis Shell

De nombreux objets prédéfinis ont des menus contextuels Shell qui peuvent être étendus. Inscrivez la commande de la même façon que vous inscrivez des 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 prédéfinis Shell de la création Shell de gestionnaires d’extensions. Ces objets prédéfinis Shell dont les menus contextuels peuvent être étendus en ajoutant des verbes dans le Registre sont marqués dans le tableau avec le mot «Verb ».

Inscription d’une application pour gérer les 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 les 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 sert deux objectifs de base. Il s’agit de spécifier comment votre application doit être appelée pour ouvrir un type de fichier arbitraire. Par exemple, vous pouvez utiliser un indicateur de ligne de commande pour indiquer qu’un type de fichier inconnu est ouvert. 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 originaux.

Pour inscrire la procédure par défaut, placez les mêmes clés de Registre que celles que vous avez créées pour le ProgID de votre application sous la sous-clé de l’application 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 présente 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 l’Explorateur Windows, la première commande est Nouvelle. 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 fichiers pour n’importe quel type de fichier.

Pour ajouter une commande de création de fichiers au sous-menu Nouveau , les fichiers de votre application doivent avoir un type de fichier associé. 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, elle Shell l’ajoute au sous-menu Nouveau. La chaîne d’affichage de la commande est la chaîne descriptive affectée au ProgID du programme.

Affectez 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 Descriptif
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 configurer pour lancer un assistant.
Données Crée un fichier contenant des données spécifiées. La valeur REG_BINARY représente les données du fichier. Les données sont ignorées si NullFile ou FileName est spécifié.
Nom du fichier 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. NullFile n’est pas affecté à une valeur. 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 Icônes de personnalisation. Il a maintenant une commande, Application MyProgram. Lorsqu’un utilisateur sélectionne l’application MyProgram à partir du sous-menu Nouveau , le Shell fichier crée un fichier nommé « New MyProgram Application.myp » et le transmet à MyProgram.exe.

capture d’écran du nouveau menu personnalisé

L’entrée de Registre est désormais la suivante :

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