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

100

J'ai découvert comment ajouter des éléments du menu contextuel du clic droit à des fichiers sur l'Explorateur Windows, en ajoutant des clés au registre. C'est-à-dire que je peux cliquer avec le bouton droit sur un fichier dans l'Explorateur et exécuter une application personnalisée sur ce fichier.

J'aimerais faire la même chose pour un dossier et je n'ai pas (encore) trouvé de moyen de le faire. Je vois des articles sur la création / l'écriture de gestionnaires de menus contextuels personnalisés, mais je préfère 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 à l '"ordinateur" dans l'explorateur, mais cela ne fonctionne pour aucun dossier.

Je voudrais pouvoir ajouter mon application personnalisée au menu contextuel et la faire fonctionner à la fois sur les fichiers et les dossiers. Existe-t-il un moyen de le faire sans écrire un gestionnaire de menu contextuel?


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

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

Elan
la source
1
Cette question est ouverte depuis 6 ans?! Qui l'a fermé il y a six jours?
Andrew
La SEULE chose que je n'aime pas à propos de StackOverflow, ce sont les clowns qui clôturent les questions ou marquent des questions comme hors sujet.
Michael

Réponses:

209

Dans l'éditeur d'enregistrement ( regedit.exe), recherchez:

  • Menu contextuel pour faire un clic droit sur les dossiers dans le panneau gauche de l'Explorateur Windows ou sur l'arrière-plan d'un répertoire dans le panneau droit:

    1. HKEY_CLASSES_ROOT\Directory\Background\shell si vous êtes administrateur
    2. HKEY_CURRENT_USER\Software\Classes\directory\Background\shell si vous êtes un utilisateur normal
  • Menu contextuel pour un clic droit sur les dossiers dans le 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. ajouter une nouvelle clé sous shell, en la nommant comme vous voulez nommer l'élément de menu contextuel
  2. ajouter une nouvelle clé à l'intérieur de cette clé, nommée command(nom obligatoire)
  3. modifiez la defaultpropriété dans commandpour myprogrampath\path\path\executable.exe %1transmettre le chemin du fichier et le nom du fichier sélectionné à votre programme personnalisé

Plus de personnalisation:

  • Ajouter une icône : ajoutez une valeur de chaîne nommée iconpour la clé créée à l'étape 1 avec une valeur correspondant à un chemin de ressource d'icône. Vous pouvez également fournir des arguments entiers pour spécifier l'icône à utiliser. Exemple:%SystemRoot%\System32\shell32.dll,3
  • Afficher uniquement sur Maj-clic : ajoute une valeur de chaîne vide nommée Extendedpour la clé créée à l'étape 1
  • Personnaliser le libellé de l'entrée de menu : modifier la valeur par défaut de la clé créée à l'étape 1
  • Modifier l'emplacement de l'entrée du menu : ajoutez une valeur de chaîne nommée Positionavec l'un des éléments suivants Top:,Bottom
jumpjack
la source
2
HKEY_CLASSES_ROOT\Directory\Background\shellne peut affecter que le clic droit sur l'arrière-plan d'un répertoire
Amos
21
Cela devrait être "%1"au cas où le chemin comporte des espaces.
Blrp
3
immédiatement. Il n'est même pas nécessaire d'ouvrir une nouvelle fenêtre d'explorateur: les nouveaux paramètres sont chargés dès que vous faites un clic droit.
jumpjack
1
semble que les variables d'environnement ne fonctionnent pas, n'est-ce pas Command?
Jack Lu
14
Concernant mon commentaire précédent: Le problème peut être résolu en le remplaçant %1par %V.
Michael Herrmann
10

Je suis retourné et j'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 "under: {path}"

Dans mon exemple, je veux qu'il ne regarde que dans le lecteur T, donc ma valeur de chaîne est "AppliesTo": "under: 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();
Bobby Byrnes
la source
2
Merci d'avoir fourni un exemple de code pour cela via C #. C'est une petite aide pour tous ceux qui souhaitent le faire rapidement à partir d'une application.
Ayo I
2
Malheureusement, la valeur "AppliesTo" ne semble pas avoir d'effet sur une entrée "Directory \ Background". Quelqu'un sait-il comment une limitation similaire peut être obtenue pour un clic droit sur l'arrière-plan d'un dossier?
cl0rkster
6

Nous avons trouvé une solution plus propre, plus simple et plus rapide: créez un fichier texte, remplissez-le de ce contenu, mettez-le à jour selon vos besoins, enregistrez-le avec le suffixe .reg et lancez-le (il n'a pas besoin de 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: il suffit de sauvegarder le fichier .reg dans un endroit sûr. Si vous modifiez manuellement le registre après avoir lancé le fichier, cliquez avec le bouton droit de la souris et sélectionnez «exporter».

Méfiez-vous des doubles espaces arrière dans le chemin: \\

jumpjack
la source
1

La seule bonne solution que j'ai trouvée vraiment fonctionnelle est: /superuser/1097054/shell-context-menu-registry-extension-doesnt-work-when-default-program-is-other

Ajoutez des clés dans HKEY_CLASSES_ROOT \ SystemFileAssociations \ your.extension \ shell \ command Modifiez la dernière clé avec la commande que vous voulez faire.

Pour mon objectif c'était:

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

Si j'exporte le, j'obtiens 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\""
Dorian Grv
la source
1

Ouvrez l'invite de commande [exécutez en tant qu'administrateur] et exécutez cette commande

reg add "HKEY_CLASSES_ROOT\Directory\shell\Refi2\command" /d "powershell.exe -noexit -command Set-Location -literalPath '%V'"
  • -d: valeur à exécuter [app name exe].
  • -v: crée une nouvelle sous-clé à l'intérieur de la touche de commande.
  • -f: pour forcer la clé si elle existe déjà.
  • powershell.exe -noexit -command Set-Location -literalPath '% V' au lieu de cela, vous pouvez spécifier le chemin de votre exe .

Pour plus de détails sur plus de fonctionnalités, exécutez: -

reg add /?
Sahil Shikalgar
la source