Création de gestionnaires de menu contextuel
Les gestionnaires de menus contextuels, également appelés gestionnaires de menus contextuels ou gestionnaires de verbes, sont un type de gestionnaire de type de fichier. Ces gestionnaires peuvent être implémentés de manière à les charger dans leur propre processus ou dans l’explorateur, ou dans d’autres processus tiers. Prenez soin de créer des gestionnaires in-process, car ils peuvent causer des dommages au processus qui les charge.
Remarque
Il existe des considérations spéciales pour les versions 64 bits de Windows lors de l’inscription de gestionnaires qui fonctionnent dans le contexte d’applications 32 bits : lorsqu’elles sont appelées dans le contexte d’une application de bits différente, le sous-système WOW64 redirige l’accès au système de fichiers vers certains chemins. Si votre gestionnaire .exe est stocké dans l’un de ces chemins, il n’est pas accessible dans ce contexte. Par conséquent, pour contourner ce problème, stockez votre fichier .exe dans un chemin d’accès qui n’est pas redirigé, ou stockez une version stub de votre fichier .exe qui lance la version réelle.
Cette rubrique est organisée comme suit :
- Verbes canoniques
- Verbes étendus
- Verbes d’accès par programmation uniquement
- Personnalisation d’un menu contextuel à l’aide de verbes statiques
- Activation de votre gestionnaire à l’aide de l’interface IDropTarget
- Spécification de la position et de l’ordre des verbes statiques
- Positionnement des verbes en haut ou en bas du menu
- Création de menus en cascade statiques
- Obtention d’un comportement dynamique pour les verbes statiques à l’aide de la syntaxe de requête avancée
- Déconseillé : association de verbes à des commandes d’échange de données dynamiques
- Fin des tâches d’implémentation détaillées
- Personnalisation du menu contextuel pour les objets Shell prédéfinis
- Extension d’un nouveau sous-menu
- Suppression de verbes et contrôle de la visibilité
- Utilisation du modèle de sélection de verbes
- Utilisation des attributs d’élément
- Implémentation de verbes personnalisés pour les dossiers via Desktop.ini
- Rubriques connexes
Verbes canoniques
Les applications sont généralement responsables de la fourniture de 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 verbe canonique n’est jamais affiché à l’utilisateur et peut être utilisé avec n’importe quelle langue d’interface utilisateur. Le système utilise le nom canonique pour générer automatiquement une chaîne d’affichage correctement localisée. Par exemple, la chaîne d’affichage du verbe ouvert est définie sur Open sur un système anglais et sur l’équivalent allemand sur un système allemand.
Verbe canonique | Description |
---|---|
Ouvrir | Ouvre le fichier ou le dossier. |
Ouvrirnew | Ouvre le fichier ou le dossier dans une nouvelle fenêtre. |
Imprimer | Imprime le fichier. |
Printto | Permet à l’utilisateur d’imprimer un fichier en le faisant glisser vers un objet d’imprimante. |
Explorer | Ouvre l’Explorateur Windows avec le dossier sélectionné. |
Propriétés | Ouvre la feuille de propriétés de l’objet. |
Remarque
Le verbe Printto est également canonique, mais il n’est jamais affiché. Son inclusion permet à l’utilisateur d’imprimer un fichier en le faisant glisser vers un objet d’imprimante.
Les gestionnaires de menus contextuels peuvent fournir leurs propres verbes canoniques via IContextMenu ::GetCommandString avec GCS_VERBW ou GCS_VERBA. Le système utilise les verbes canoniques comme deuxième paramètre (lpOperation) passé à ShellExecute et est le CMINVOKECOMMANDINFO.membre lpVerb passé à la méthode IContextMenu ::InvokeCommand.
Verbes étendus
Lorsque l’utilisateur clique avec le bouton droit sur un objet, le menu contextuel affiche les verbes par défaut. Vous pouvez ajouter et prendre en charge des commandes sur certains menus contextuels qui ne sont pas affichés 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 similaires aux verbes normaux, mais sont distingués des verbes normaux par la façon dont ils sont inscrits. Pour avoir accès aux verbes étendus, l’utilisateur doit cliquer avec le bouton droit sur un objet en appuyant sur la touche Maj. Lorsque l’utilisateur le fait, les verbes étendus sont affichés en plus des verbes par défaut.
Vous pouvez utiliser le Registre pour définir un ou plusieurs verbes étendus. Les commandes associées s’affichent uniquement lorsque l’utilisateur clique avec le bouton droit sur un objet tout en appuyant également sur la touche Maj. Pour définir un verbe comme étendu, ajoutez une valeur REG_SZ « étendue » à la sous-clé du verbe. La valeur ne doit pas avoir de données associées.
Verbes d’accès par programmation uniquement
Ces verbes ne sont jamais affichés dans un menu contextuel. Ces informations sont accessibles à l’aide de ShellExecuteEx et en spécifiant le champ lpVerb du paramètre pExecInfo (objet SHELLEXECUTEINFO). Pour définir un verbe en tant qu’accès par programmation uniquement, ajoutez une valeur REG_SZ « ProgramAccessOnly » à la sous-clé du verbe. La valeur ne doit pas avoir de données associées.
Vous pouvez utiliser le Registre pour définir un ou plusieurs verbes étendus. Les commandes associées s’affichent uniquement lorsque l’utilisateur clique avec le bouton droit sur un objet tout en appuyant également sur la touche Maj. Pour définir un verbe comme étendu, ajoutez une valeur REG_SZ « étendue » à la sous-clé du verbe. La valeur ne doit pas avoir de données associées.
Personnalisation d’un menu contextuel à l’aide de verbes statiques
Après avoir choisi un verbe statique ou dynamique pour votre menu contextuel, vous pouvez étendre le menu contextuel d’un type de fichier en inscrivant un verbe statique pour le type de fichier. Pour ce faire, ajoutez une sous-clé Shell sous la sous-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 le faisant de 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 la fonction ShellExecuteEx est appelée, mais 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.
L’interpréteur de commandes utilise le premier verbe disponible dans l’ordre suivant :
- Verbe par défaut
- Premier verbe dans le Registre, si l’ordre du verbe est spécifié
- Verbe Ouvert
- Ouvrir avec un verbe
Si aucun des verbes répertoriés n’est disponible, l’opération échoue.
Créez une sous-clé pour chaque verbe que vous souhaitez ajouter sous la sous-clé Shell. Chacune de ces sous-clés doit avoir une valeur REG_SZ définie sur la chaîne d’affichage du verbe (chaîne localisée). Pour chaque sous-clé de verbe, créez une sous-clé de commande avec la valeur par défaut définie sur la ligne de commande pour activer les éléments. Pour les verbes canoniques, tels que Open et Print, vous pouvez omettre la chaîne d’affichage, car le système affiche automatiquement une chaîne correctement localisée. Pour les verbes noncanoniques, si vous omettez la chaîne d’affichage, la chaîne de verbe est affichée.
Dans l’exemple de Registre suivant, notez que :
- Étant donné que Doit n’est pas un verbe canonique, il reçoit un nom d’affichage, qui peut être sélectionné en appuyant sur la touche D.
- Le verbe Printto n’apparaît pas dans le menu contextuel. Toutefois, son inclusion dans le Registre permet à l’utilisateur d’imprimer des fichiers en les supprimant sur une icône d’imprimante.
- Une sous-clé est affichée pour chaque verbe. %1 représente le nom du fichier et %2 le nom de l’imprimante.
HKEY_CLASSES_ROOT
.myp-ms
(Default) = MyProgram.1
MyProgram.1
(Default) = My Program Application
Shell
(Default) = doit
doit
(Default) = &Do It
command
(Default) = c:\MyDir\MyProgram.exe /d "%1"
open
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"
Le diagramme suivant illustre l’extension du menu contextuel conformément aux entrées de Registre ci-dessus. Ce menu contextuel comporte des verbes Open, Do It et Print dans son menu, avec Do It comme verbe par défaut.
Activation de votre gestionnaire à l’aide de l’interface IDropTarget
Dynamic Data Exchange (DDE) est déconseillé ; utilisez IDropTarget à la place. IDropTarget est plus robuste et offre une meilleure prise en charge de l’activation, car elle utilise l’activation COM du gestionnaire. Dans le cas de plusieurs sélections d’éléments, IDropTarget n’est pas soumis aux restrictions de taille de mémoire tampon trouvées dans DDE et CreateProcess. En outre, les éléments sont passés à l’application en tant qu’objet de données qui peut être converti en tableau d’éléments à l’aide de la fonction SHCreateShellItemArrayFromDataObject. Cela est plus simple et ne perd pas les informations d’espace de noms, car cela se produit lorsque l’élément est converti en chemin d’accès pour les protocoles de ligne de commande ou DDE.
Pour plus d’informations sur les requêtes IDropTarget et Shell pour les attributs d’association de fichiers, consultez Types perçus et Inscription d’application.
Spécification de la position et de l’ordre des verbes statiques
Normalement, les verbes sont classés sur un menu contextuel en fonction de la façon dont ils sont énumérés ; l’énumération est basée d’abord sur l’ordre du tableau d’association, puis sur l’ordre des éléments du tableau d’association, comme défini par l’ordre de tri du Registre.
Les verbes peuvent être classés en spécifiant la valeur par défaut de la sous-clé Shell pour l’entrée d’association. Cette valeur par défaut peut inclure un seul élément, qui sera affiché à la position supérieure du menu contextuel, ou une liste d’éléments séparés par des espaces ou des virgules. Dans ce dernier cas, le premier élément de la liste est l’élément par défaut, et les autres verbes sont affichés immédiatement sous celui-ci dans l’ordre spécifié.
Par exemple, l’entrée de Registre suivante produit des verbes de menu contextuel dans l’ordre suivant :
- Affichage
- Gadgets
- Personnalisation
HKEY_CLASSES_ROOT
DesktopBackground
Shell
Display
Gadgets
Personalization
De même, l’entrée de Registre suivante produit des verbes de menu contextuel dans l’ordre suivant :
- Personnalisation
- Gadgets
- Affichage
HKEY_CLASSES_ROOT
DesktopBackground
Shell = "Personalization,Gadgets"
Display
Positionnement des verbes en haut ou en bas du menu
L’attribut de Registre suivant peut être utilisé pour placer un verbe en haut ou en bas du menu. S’il existe plusieurs verbes qui spécifient cet attribut, le dernier à faire obtient la priorité :
Position=Top | Bottom
Création de menus en cascade statiques
Dans Windows 7 et versions ultérieures, l’implémentation de menu en cascade est prise en charge via les paramètres du Registre. Avant Windows 7, la création de menus en cascade n’était possible que par l’implémentation de l’interface IContextMenu . Dans Windows 7 et versions ultérieures, vous devez recourir à des solutions com basées sur du code uniquement lorsque les méthodes statiques sont insuffisantes.
La capture d’écran suivante fournit un exemple de menu en cascade.
Dans Windows 7 et versions ultérieures, il existe trois façons de créer des menus en cascade :
- Création de menus en cascade avec l’entrée de Registre SubCommands
- Création de menus en cascade avec l’entrée de Registre ExtendedSubCommandsKey
- Création de menus en cascade avec l’interface IExplorerCommand
Création de menus en cascade avec l’entrée de Registre SubCommands
Dans Windows 7 et versions ultérieures, vous pouvez utiliser l’entrée SubCommands pour créer des menus en cascade à l’aide de la procédure suivante.
Pour créer un menu en cascade à l’aide de l’entrée SubCommands
Créez une sous-clé sous HKEY_CLASSES_ROOT\shell ProgID\pour représenter votre menu en cascade. Dans cet exemple, nous donnons à cette sous-clé le nom CascadeTest. Vérifiez que la valeur par défaut de la sous-clé CascadeTest est vide et affichée comme (valeur non définie).
HKEY_CLASSES_ROOT * shell CascadeTest (Default)
Dans votre sous-clé CascadeTest , ajoutez une entrée MUIVerb de type REG_SZ et affectez-la au texte qui apparaîtra comme son nom dans le menu contextuel. Dans cet exemple, nous lui affectons « Menu cascade de test ».
HKEY_CLASSES_ROOT * shell CascadeTest (Default) MUIVerb = Test Cascade Menu
Dans votre sous-clé CascadeTest , ajoutez une entrée SubCommands de type REG_SZ qui est affectée à la liste, délimitée par des points-virgules, des verbes qui doivent apparaître dans le menu, dans l’ordre d’apparence. Par exemple, nous assignons ici un certain nombre de verbes fournis par le système :
HKEY_CLASSES_ROOT * Shell CascadeTest SubCommands Windows.delete;Windows.properties;Windows.rename;Windows.cut;Windows.copy;Windows.paste
Dans le cas de verbes personnalisés, implémentez-les à l’aide de l’une des méthodes d’implémentation de verbes statiques et les répertoriez sous la sous-clé CommandStore , comme indiqué dans cet exemple pour un verbe verbe fictif VerbName :
HKEY_LOCAL_MACHINE Software Microsoft Windows CurrentVersion Explorer CommandStore Shell VerbName command (Default) = notepad.exe %1
Remarque
Cette méthode présente l’avantage que les verbes personnalisés peuvent être inscrits une fois et réutilisés en listant le nom du verbe sous l’entrée SubCommands. Toutefois, l’application doit avoir l’autorisation de modifier le Registre sous HKEY_LOCAL_MACHINE.
Création de menus en cascade avec l’entrée de Registre ExtendedSubCommandsKey
Dans Windows 7 et versions ultérieures, vous pouvez utiliser l’entrée ExtendedSubCommandKey pour créer des menus en cascade étendus : menus en cascade dans les menus en cascade.
La capture d’écran suivante est un exemple de menu en cascade étendu.
Étant donné que HKEY_CLASSES_ROOT est une combinaison de HKEY_CURRENT_USER et de HKEY_LOCAL_MACHINE, vous pouvez inscrire tous les verbes personnalisés sous la sous-clé classes logicielles\HKEY_CURRENT_USER.\ L’avantage principal de cette opération est que l’autorisation avec élévation de privilèges n’est pas nécessaire. En outre, d’autres associations de fichiers peuvent réutiliser cet ensemble complet de verbes en spécifiant la même sous-clé ExtendedSubCommandsKey. Si vous n’avez pas besoin de réutiliser cet ensemble de verbes, vous pouvez répertorier les verbes sous le parent, mais vérifier que la valeur par défaut du parent est vide.
Pour créer un menu en cascade à l’aide d’une entrée ExtendedSubCommandsKey
Créez une sous-clé sous HKEY_CLASSES_ROOT\shell ProgID\pour représenter votre menu en cascade. Dans cet exemple, nous donnons à cette sous-clé le nom CascadeTest2. Vérifiez que la valeur par défaut de la sous-clé CascadeTest est vide et affichée comme (valeur non définie).
HKEY_CLASSES_ROOT * shell CascadeTest2 (Default)
Dans votre sous-clé CascadeTest , ajoutez une entrée MUIVerb de type REG_SZ et affectez-la au texte qui apparaîtra comme son nom dans le menu contextuel. Dans cet exemple, nous lui affectons « Menu cascade de test ».
HKEY_CLASSES_ROOT * shell CascadeTest (Default) MUIVerb = Test Cascade Menu 2
Sous la sous-clé CascadeTest que vous avez créée, ajoutez une sous-clé ExtendedSubCommandsKey , puis ajoutez les sous-commandes de document (de type REG_SZ ) ; par exemple :
HKEY_CLASSES_ROOT txtfile Shell Test Cascade Menu 2 (Default) ExtendedSubCommandsKey Layout Properties Select all
Vérifiez que la valeur par défaut de la sous-clé Test Cascade Menu 2 est vide et affichée comme (valeur non définie).
Remplissez les sous-clés à l’aide de l’une des implémentations de verbe statiques suivantes. Notez que la sous-clé CommandFlags représente les valeurs EXPCMDFLAGS. Si vous souhaitez ajouter un séparateur avant ou après l’élément de menu en cascade, utilisez ECF_SEPARATORBEFORE (0x20) ou ECF_SEPARATORAFTER (0x40). Pour obtenir une description de ces indicateurs Windows 7 et ultérieurs, consultez IExplorerCommand ::GetFlags. ECF_SEPARATORBEFORE fonctionne uniquement pour les éléments de menu de niveau supérieur. MUIVerb est de type REG_SZ, et CommandFlags est de type REG_DWORD.
HKEY_CLASSES_ROOT txtile Shell Test Cascade Menu 2 (Default) ExtendedSubCommandsKey Shell cmd1 MUIVerb = Notepad command (Default) = %SystemRoot%\system32\notepad.exe %1 cmd2 MUIVerb = Wordpad CommandFlags = 0x20 command (Default) = "C:\Program Files\Windows NT\Accessories\wordpad.exe" %1
La capture d’écran suivante est une illustration des exemples précédents d’entrée de clé de Registre.
Création de menus en cascade avec l’interface IExplorerCommand
Une autre option pour ajouter des verbes à un menu en cascade consiste à utiliser IExplorerCommand ::EnumSubCommands. Cette méthode permet aux sources de données qui fournissent leurs commandes de module de commande via IExplorerCommandProvider d’utiliser ces commandes comme verbes dans un menu contextuel. Dans Windows 7 et versions ultérieures, vous pouvez fournir la même implémentation de verbe à l’aide de IExplorerCommand que vous pouvez avec IContextMenu.
Les deux captures d’écran suivantes illustrent l’utilisation de menus en cascade dans le dossier Appareils .
La capture d’écran suivante illustre une autre implémentation d’un menu en cascade dans le dossier Appareils .
Remarque
Étant donné que IExplorerCommand prend uniquement en charge l’activation in-process, il est recommandé d’utiliser des sources de données Shell qui doivent partager l’implémentation entre les commandes et les menus contextuels.
Obtention d’un comportement dynamique pour les verbes statiques à l’aide de la syntaxe de requête avancée
La syntaxe de requête avancée (AQS) peut exprimer une condition qui sera évaluée à l’aide de propriétés de l’élément pour lequel le verbe est instancié. Ce système fonctionne uniquement avec des propriétés rapides. Il s’agit des propriétés que la source de données Shell signale aussi rapidement en ne retournant pas SHCOLSTATE_SLOW à partir d’IShellFolder2 ::GetDefaultColumnState.
Windows 7 et versions ultérieures prennent en charge les valeurs canoniques qui évitent les problèmes sur les builds localisées. La syntaxe canonique suivante est requise sur les builds localisées pour tirer parti de cette amélioration de Windows 7.
System.StructuredQueryType.Boolean#True
Dans l’exemple d’entrée de Registre suivant :
- La valeur AppliesTo contrôle si le verbe est affiché ou masqué.
- La valeur DefaultAppliesTo contrôle le verbe par défaut.
- La valeur HasLUAShield contrôle si une protection de contrôle de compte d’utilisateur (UAC) est affichée.
Dans cet exemple, la valeur DefaultAppliesTo rend ce verbe le verbe par défaut pour n’importe quel fichier avec le mot « exampleText1 » dans son nom de fichier. La valeur AppliesTo active le verbe pour n’importe quel fichier avec « exampleText1 » dans le nom. La valeur HasLUAShield affiche le bouclier des fichiers avec « exampleText2 » dans le nom.
HKEY_CLASSES_ROOT
txtile
shell
test.verb
DefaultAppliesTo = System.ItemName:"exampleText1"
HasLUAShield = System.ItemName:"exampleText2"
AppliesTo = System.ItemName:"exampleText1"
Ajoutez la sous-clé Command et une valeur :
HKEY_CLASSES_ROOT
txtile
shell
test.verb
Command
(Default) = %SystemRoot%\system32\notepad.exe %1
Dans le Registre Windows 7, consultez HKEY_CLASSES_ROOT\lecteur comme exemple de verbes bitlocker qui utilisent l’approche suivante :
- AppliesTo = System.Volume.BitlockerProtection :=2
- System.Volume.BitlockerRequiresAdmin :=System.StructuredQueryType.Boolean#True
Pour plus d’informations sur AQS, consultez Syntaxe de requête avancée.
Déconseillé : association de verbes à des commandes d’échange de données dynamiques
DDE est déconseillé ; utilisez IDropTarget à la place. DDE est déconseillé, car il s’appuie sur un message de fenêtre de diffusion pour découvrir le serveur DDE. Un serveur DDE bloque le message de fenêtre de diffusion et bloque donc les conversations DDE pour d’autres applications. Il est courant qu’une seule application bloquée provoque un blocage ultérieur dans l’expérience de l’utilisateur.
La méthode IDropTarget est plus robuste et offre une meilleure prise en charge de l’activation, car elle utilise l’activation COM du gestionnaire. Dans le cas de plusieurs sélections d’éléments, IDropTarget n’est pas soumis aux restrictions de taille de mémoire tampon trouvées dans DDE et CreateProcess. En outre, les éléments sont passés à l’application en tant qu’objet de données qui peut être converti en tableau d’éléments à l’aide de la fonction SHCreateShellItemArrayFromDataObject. Cela est plus simple et ne perd pas les informations d’espace de noms, car cela se produit lorsque l’élément est converti en chemin d’accès pour les protocoles de ligne de commande ou DDE.
Pour plus d’informations sur les requêtes IDropTarget et Shell pour les attributs d’association de fichiers, consultez Types perçus et Inscription d’application.
Fin des tâches d’implémentation détaillées
Les tâches suivantes pour implémenter des verbes sont pertinentes pour les implémentations de verbes statiques et dynamiques. Pour plus d’informations sur les verbes dynamiques, consultez Personnalisation d’un menu contextuel à l’aide de verbes dynamiques.
Personnalisation du menu contextuel pour les objets Shell prédéfinis
De nombreux objets Shell prédéfinis ont des menus contextuels qui peuvent être personnalisés. 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.
Une liste d’objets prédéfinis se trouve dans la section Objets shell prédéfinis de la création de gestionnaires d’extensions Shell. Ces objets Shell prédéfinis dont les menus contextuels peuvent être personnalisés en ajoutant des verbes dans le Registre sont marqués dans le tableau avec le mot Verbe.
Extension d’un nouveau sous-menu
Lorsqu’un utilisateur ouvre le menu Fichier dans l’Explorateur Windows, l’une des commandes affichées est Nouvelle. La sélection de cette commande affiche un sous-menu. Par défaut, le sous-menu 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 le nom de fichier. Lorsque la commande Nouveau du menu Fichier est sélectionnée, l’interpréteur de commandes ajoute le type de fichier au sous-menu Nouveau. La chaîne d’affichage de la commande est la chaîne descriptive affectée au ProgID du programme.
Pour spécifier la méthode de création de fichier, affectez une ou plusieurs valeurs de données à la sous-clé ShellNew . Les valeurs disponibles sont répertoriées dans le tableau suivant.
Valeur de sous-clé ShellNew | Description |
---|---|
Commande | Exécute une application. Cette valeur REG_SZ spécifie 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. Cette valeur REG_BINARY spécifie 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é. Cette valeur REG_SZ spécifie le chemin complet du fichier à copier. |
NullFile | Crée un fichier vide. NullFile n’a aucune valeur affectée. Si NullFile est spécifié, les valeurs de Registre Data et FileName sont ignorées. |
L’exemple de clé de Registre et la capture d’écran suivants illustrent le nouveau sous-menu pour le type de fichier .myp-ms. Il a une commande, MyProgram Application.
HKEY_CLASSES_ROOT
.myp
(Default) = MyProgram.1
MyProgram.1
ShellNew
NullFile
La capture d’écran illustre le nouveau sous-menu. Lorsqu’un utilisateur sélectionne l’application MyProgram à partir du sous-menu Nouveau, l’interpréteur de commandes crée un fichier nommé New MyProgram Application.myp-ms et le transmet à MyProgram.exe.
Création de gestionnaires glisser-déplacer
La procédure de base pour l’implémentation d’un gestionnaire de glisser-déplacer est la même que pour les gestionnaires de menus contextuels conventionnels. Toutefois, les gestionnaires de menus contextuels utilisent normalement uniquement le pointeur IDataObject transmis à la méthode IShellExtInit ::Initialize du gestionnaire pour extraire le nom de l’objet. Un gestionnaire de glisser-déplacer peut implémenter un gestionnaire de données plus sophistiqué pour modifier le comportement de l’objet déplacé.
Lorsqu’un utilisateur clique avec le bouton droit sur un objet Shell pour faire glisser un objet, un menu contextuel s’affiche lorsque l’utilisateur tente de supprimer l’objet. La capture d’écran suivante illustre un menu contextuel de glisser-déplacer classique.
Un gestionnaire de glisser-déplacer est un gestionnaire de menus contextuels qui peut ajouter des éléments à ce menu contextuel. Les gestionnaires glisser-déplacer sont généralement inscrits sous la sous-clé suivante.
HKEY_CLASSES_ROOT
Directory
shellex
DragDropHandlers
Ajoutez une sous-clé sous la sous-clé DragDropHandlers nommée pour le gestionnaire de glisser-déplacer, puis définissez la valeur par défaut de la sous-clé sur la forme de chaîne du GUID CLSID (Class Identifier) du gestionnaire. L’exemple suivant active le gestionnaire de glisser-déplacer MyDD .
HKEY_CLASSES_ROOT
Directory
shellex
DragDropHandlers
MyDD
(Default) = {MyDD CLSID GUID}
Suppression de verbes et contrôle de la visibilité
Vous pouvez utiliser les paramètres de stratégie Windows pour contrôler la visibilité détaillée. Les verbes peuvent être supprimés via les paramètres de stratégie en ajoutant une valeur SuppressionPolicy ou une valeur GUID SuppressionPolicyEx à la sous-clé de Registre du verbe. Définissez la valeur de la sous-clé SuppressionPolicy sur l’ID de stratégie. Si la stratégie est activée, le verbe et l’entrée de menu contextuel associé sont supprimés. Pour connaître les valeurs d’ID de stratégie possibles, consultez l’énumération RESTRICTIONS .
Utilisation du modèle de sélection de verbes
Les valeurs de Registre doivent être définies pour que les verbes gèrent les situations où un utilisateur peut sélectionner un seul élément, plusieurs éléments ou une sélection à partir d’un élément. Un verbe nécessite des valeurs de Registre distinctes pour chacune de ces trois situations que le verbe prend en charge. Les valeurs possibles pour le modèle de sélection de verbe sont les suivantes :
- Spécifiez la valeur MultiSelectModel pour tous les verbes. Si la valeur MultiSelectModel n’est pas spécifiée, elle est déduite du type d’implémentation de verbe que vous avez choisie. Pour les méthodes COM (telles que DropTarget et ExecuteCommand) Player est supposée, et pour les autres méthodes , Document est supposé.
- Spécifiez Single pour les verbes qui ne prennent en charge qu’une seule sélection.
- Spécifiez Player pour les verbes qui prennent en charge un nombre quelconque d’éléments.
- Spécifiez document pour les verbes qui créent une fenêtre de niveau supérieur pour chaque élément. Cela limite le nombre d’éléments activés et permet d’éviter de manquer de ressources système si l’utilisateur ouvre trop de fenêtres.
Lorsque le nombre d’éléments sélectionnés ne correspond pas au modèle de sélection de verbe ou est supérieur aux limites par défaut décrites dans le tableau suivant, le verbe ne s’affiche pas.
Type d’implémentation de verbe | Document | Joueur |
---|---|---|
Ancien | 15 éléments | 100 éléments |
COM | 15 éléments | Aucune limite |
Voici des exemples d’entrées de Registre utilisant la valeur MultiSelectModel.
HKEY_CLASSES_ROOT
Folder
shell
open
= MultiSelectModel = Document
HKEY_CLASSES_ROOT
ProgID
shell
verb
= MultiSelectModel = Single | Document | Player
Utilisation des attributs d’élément
Les valeurs d’indicateur SFGAO des attributs Shell d’un élément peuvent être testées pour déterminer si le verbe doit être activé ou désactivé.
Pour utiliser cette fonctionnalité d’attribut, ajoutez les valeurs REG_DWORD suivantes sous le verbe :
- La valeur AttributeMask spécifie la valeur SFGAO des valeurs de bits du masque à tester.
- La valeur AttributeValue spécifie la valeur SFGAO des bits testés.
- La méthode ImpliedSelectionModel spécifie zéro pour les verbes d’élément, ou non zéro pour les verbes dans le menu contextuel en arrière-plan.
Dans l’exemple d’entrée de Registre suivant, AttributeMask est défini sur SFGAO_READONLY (0x40000).
HKEY_CLASSES_ROOT
txtfile
Shell
test.verb2
AttributeMask = 0x40000
AttributeValue = 0x0
ImpliedSelectionModel = 0x0
command
(Default) = %SystemRoot%\system32\notepad.exe %1
Implémentation de verbes personnalisés pour les dossiers via Desktop.ini
Dans Windows 7 et versions ultérieures, vous pouvez ajouter des verbes à un dossier via Desktop.ini. Pour plus d’informations sur les fichiers Desktop.ini, consultez Comment personnaliser des dossiers avec Desktop.ini.
Remarque
Desktop.ini fichiers doivent toujours être marqués Comme masqués par le système + , ils ne seront pas affichés aux utilisateurs.
Pour ajouter des verbes personnalisés pour les dossiers via un fichier Desktop.ini, procédez comme suit :
Créez un dossier marqué en lecture seule ou système.
Créez un fichier Desktop.ini qui inclut un [. ShellClassInfo] DirectoryClass=Folder ProgID.
Dans le Registre, créez HKEY_CLASSES_ROOT\Folder ProgID avec la valeur CanUseForDirectory. La valeur CanUseForDirectory évite l’utilisation incorrecte des ProgID qui ne sont pas définis pour participer à l’implémentation de verbes personnalisés pour les dossiers via Desktop.ini.
Ajoutez des verbes sous la sous-clé FolderProgID, par exemple :
HKEY_CLASSES_ROOT CustomFolderType Shell MyVerb command (Default) = %SystemRoot%\system32\notepad.exe %1\desktop.ini
Remarque
Ces verbes peuvent être le verbe par défaut, auquel cas double-cliquer sur le dossier active le verbe.
Rubriques connexes
-
Meilleures pratiques pour les gestionnaires de menus contextuels et les verbes de sélection multiple
-
Choisir entre un verbe statique et dynamique pour votre menu contextuel
-
Personnalisation d’un menu contextuel en utilisant des verbes dynamiques