web-dev-qa-db-fra.com

Comment ajouter un élément de menu contextuel à l'Explorateur Windows pour les dossiers

J'ai découvert comment ajouter des éléments de menu contextuel contextuels aux fichiers de l'Explorateur Windows, en ajoutant des clés au registre. C'est à dire. Je peux faire un clic droit sur un fichier dans l'explorateur et exécuter une application personnalisée sur ce fichier.

Je voudrais faire la même chose pour un dossier et je n'ai pas encore trouvé le moyen de le faire. Je vois des articles sur la création/écriture de gestionnaires de menus contextuels personnalisés, mais je préférerais ne pas y aller.

J'ai trouvé un article ici sur la façon d'ajouter des éléments de menu contextuel en cascade au bureau et à "Ordinateur" dans l'Explorateur, mais cela ne fonctionne pour aucun dossier.

J'aimerais pouvoir ajouter mon application personnalisée au menu contextuel et la faire fonctionner à la fois sur les fichiers et sur les dossiers. Y a-t-il un moyen de faire cela sans écrire un gestionnaire de menu contextuel?

79
Elan

Menu contextuel pour clic droit sur les dossiers du panneau de gauche de l'explorateur Windows ou sur l'arrière-plan d'un répertoire du panneau de droite:

  1. HKEY_CLASSES_ROOT\Directory\Background\Shell si vous êtes administrateur
  2. HKEY_CURRENT_USER\Software\Classes\répertoire\Background\Shell si vous êtes un utilisateur normal

Menu contextuel pour clic droit sur les dossiers du panneau droit de l'explorateur Windows:

  1. HKEY_CLASSES_ROOT\Directory\Shell si vous êtes administrateur
  2. HKEY_CURRENT_USER\Software\Classes\directory\Shell si vous êtes un utilisateur normal

Menu contextuel pour n'importe quel fichier:

  1. HKEY_CLASSES_ROOT\*\Shell si vous êtes administrateur
  2. HKEY_CURRENT_USER\Software\Classes\*\Shell si vous êtes un utilisateur normal

Dans tous les cas:

  1. ajoutez une nouvelle clé sous "Shell", en la nommant comme vous voulez nommer l'élément du menu contextuel
  2. ajoute une nouvelle clé à l'intérieur de cette clé, nommée commande (nom obligatoire)
  3. éditez la propriété "default" dans "commande" en myprogrampath\path\path\executable.exe% 1 pour transmettre le chemin et le nom du fichier sélectionné à votre programme personnalisé

Plus de personnalisation:

  • Ajouter une icône: ajoute une valeur de chaîne nommée icon pour la clé créée à l'étape 1 avec une valeur correspondant à un chemin de ressource d'icône. Vous pouvez également fournir un argument entier pour spécifier quelle icône utiliser. Exemple: %SystemRoot%\System32\Shell32.dll,3
  • Affichage uniquement en maintenant la touche Maj enfoncée: ajoute une valeur de chaîne vide nommée Extended pour la clé créée à l'étape 1
  • Personnaliser le libellé de l'entrée de men: modifier la valeur de la valeur par défaut pour la clé créée à l'étape 1
  • Modifier l'emplacement de l'entrée de men: ajoute une valeur de chaîne nommée Position avec l'un des éléments suivants: Top, Bottom
171
jumpjack

J'ai trouvé la solution dans l'article ci-dessous, qui décrit comment procéder via le registre pour les fichiers, ainsi que pour les dossiers:

Les deux articles suivants fournissent des informations et des options supplémentaires:

18
Elan

Je suis retourné et ai également répondu à cela dans un autre sujet car il ne semble pas y avoir beaucoup sur cette question en particulier.

J'ai trouvé que le moyen le plus simple était d'ajouter une valeur de chaîne à la clé appelée "AppliesTo" et de définir sa valeur sur "sous: {chemin}".

Dans mon exemple, je veux qu'il regarde uniquement dans le lecteur T, ma valeur de chaîne est donc "AppliesTo": "sous: T:".

En C #, ceci est facilement accompli avec ce qui suit:

RegistryKey _key = Registry.ClassesRoot.OpenSubKey("Folder\\Shell", true);
RegistryKey newkey = _key.CreateSubKey("My Menu Item");
newkey.SetValue("AppliesTo", "under:T:");

RegistryKey subNewkey = newkey.CreateSubKey("Command");
subNewkey.SetValue("", "C:\\yourApplication.exe");
subNewkey.Close();

newkey.Close();
_key.Close();
7
Bobby Byrnes

Vous avez trouvé une solution plus propre, plus facile et plus rapide: créez un fichier texte, remplissez-le avec ce contenu, mettez-le à jour en fonction de vos besoins, enregistrez-le avec le suffixe .reg et lancez-le (il n'a pas besoin des privilèges d'administrateur car il accède à la partie utilisateur du registre ):

Windows Registry Editor Version 5.00

; Setup context menu item for click on right panel:
[HKEY_CURRENT_USER\Software\Classes\directory\Background\Shell\MenuItemNameBackground\command]
@="C:\\yourpath\\executable.exe \"%1\""

; Optional: specify an icon for the item:   
; HKEY_CURRENT_USER\Software\Classes\directory\Background\Shell\MenuItemNameBackground]
;"icon"="C:\\yourpath\\appicon.ico"

; Optional: specify a position in the menu
; HKEY_CURRENT_USER\Software\Classes\directory\Background\Shell\MenuItemNameBackground]
;"position"="Bottom"

; -------------------------------------------------------------------------------------

; Setup context menu item for click on folders tree item:
[HKEY_CURRENT_USER\Software\Classes\directory\Shell\MenuItemNamePanel\command]
@="C:\\yourpath\\executable.exe \"%1\""

; Optional: specify an icon for the item:   
; [HKEY_CURRENT_USER\Software\Classes\directory\Shell\MenuItemNamePanel]
;"icon"="C:\\yourpath\\appicon.ico"

; Optional: specify a position in the menu
; [HKEY_CURRENT_USER\Software\Classes\directory\Shell\MenuItemNamePanel]
;"position"="Top"

De cette façon, vous pouvez également avoir une sauvegarde de votre configuration: enregistrez simplement le fichier .reg dans un endroit sûr. Si vous modifiez manuellement le registre après le lancement du fichier, cliquez avec le bouton droit de la souris et sélectionnez "exporter".

Attention aux doubles backspaces dans le chemin: \\

0
jumpjack

La seule bonne solution que j'ai trouvée qui fonctionne vraiment est la suivante: https://superuser.com/questions/1097054/Shell-context-menu-regenu-extension-doesnt-work-when-default-program- est-autre

Ajoutez des clés dans HKEY_CLASSES_ROOT\SystemFileAssociations\ your.extension \Shell\command Modifiez la dernière clé à l'aide de la commande à exécuter.

Pour moi c'était:

"C:\Program Files (x86)\GPSBabel\gpsbabel.exe" -r -i gpx -f "%1" -x simplify,count=1000 -o gpx -F "%1.gpx"

Si je l'exporte, je reçois un .reg:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\SystemFileAssociations\.gpx\Shell\Simplify gpx\command]
@="\"C:\\Program Files (x86)\\GPSBabel\\gpsbabel.exe\" -r -i gpx -f \"%1\" -x simplify,count=1000 -o gpx -F \"%1.gpx\""
0
Dorian Grv