Come aggiungere la voce del menu contestuale a Windows Explorer per le cartelle [chiuso]


100

Ho scoperto come aggiungere voci del menu contestuale del tasto destro del mouse ai file su Windows Explorer, aggiungendo chiavi al registro. Ad esempio, posso fare clic con il pulsante destro del mouse su un file in Explorer ed eseguire un'app personalizzata su quel file.

Vorrei fare lo stesso per una cartella e non ho trovato un modo per farlo (ancora). Vedo articoli sulla creazione / scrittura di gestori di menu contestuali personalizzati, ma preferirei non andarci.

Ho trovato un articolo qui su come aggiungere voci del menu contestuale a cascata al desktop e al "Computer" in Explorer, ma questo non funziona per nessuna cartella.

Vorrei poter aggiungere la mia app personalizzata al menu contestuale e farla funzionare su file e cartelle. C'è un modo per farlo senza scrivere un gestore del menu contestuale?


Ho trovato la soluzione nell'articolo seguente, che descrive come farlo tramite il registro per i file e per le cartelle:

I due articoli seguenti hanno fornito informazioni e opzioni aggiuntive:


1
Questa domanda è aperta da 6 anni ?! Chi l'ha chiuso sei giorni fa?
Andrew

L'UNICA cosa che non mi piace di StackOverflow sono i clown che chiudono le domande o contrassegnano le domande come fuori tema.
Michael,

Risposte:


209

Nell'editor di registrazione ( regedit.exe) trova:

  • Menu contestuale per fare clic con il tasto destro sulle cartelle nel pannello sinistro di Windows Explorer o sullo sfondo di una directory nel pannello destro:

    1. HKEY_CLASSES_ROOT\Directory\Background\shell se sei amministratore
    2. HKEY_CURRENT_USER\Software\Classes\directory\Background\shell se sei un utente normale
  • Menu contestuale per fare clic con il tasto destro sulle cartelle nel pannello destro di Windows Explorer:

    1. HKEY_CLASSES_ROOT\Directory\shell se sei amministratore
    2. HKEY_CURRENT_USER\Software\Classes\directory\shell se sei un utente normale
  • Menu contestuale per qualsiasi file:

    1. HKEY_CLASSES_ROOT\*\shell se sei amministratore
    2. HKEY_CURRENT_USER\Software\Classes\*\shell se sei un utente normale

In tutti i casi:

  1. aggiungere una nuova chiave sotto shell, denominandola come si desidera denominare la voce del menu contestuale
  2. aggiungi una nuova chiave all'interno di questa chiave, denominata command(nome obbligatorio)
  3. modificare la defaultproprietà in commandper myprogrampath\path\path\executable.exe %1passare il percorso e il nome del file selezionato al programma personalizzato

Più personalizzazione:

  • Aggiungi icona : aggiunge un valore stringa denominato iconper la chiave creata al passaggio 1 con il valore corrispondente a un percorso di risorsa icona. È inoltre possibile fornire argomenti interi per specificare quale icona utilizzare. Esempio:%SystemRoot%\System32\shell32.dll,3
  • Visualizza solo quando si fa clic con il tasto Maiusc : aggiunge un valore di stringa vuoto denominato Extendedper la chiave creata al passaggio 1
  • Personalizza l'etichetta della voce di menu : cambia il valore del valore predefinito per la chiave creata al passaggio 1
  • Cambiare posizione voce di menu : aggiungere un valore stringa denominato Positioncon uno di: Top,Bottom

2
HKEY_CLASSES_ROOT\Directory\Background\shellpuò influenzare solo il clic destro sullo sfondo di una directory
Amos

21
Dovrebbe essere "%1"nel caso in cui il percorso abbia spazi.
Blrp

3
subito. Non è nemmeno necessario aprire una nuova finestra di Explorer: le nuove impostazioni vengono caricate non appena fai clic con il pulsante destro del mouse.
jumpjack

1
sembra che le variabili d'ambiente non funzionino Command, vero?
Jack Lu

14
Per quanto riguarda il mio commento precedente: il problema può essere risolto sostituendo %1con %V.
Michael Herrmann

10

Sono tornato indietro e ho anche risposto a questo in un altro argomento poiché non sembra esserci molto su questa domanda in particolare.

Ho scoperto che il modo più semplice era aggiungere un valore stringa alla chiave chiamato "AppliesTo" e impostarne il valore su "under: {path}"

Nel mio esempio, voglio che guardi solo nell'unità T, quindi il mio valore String è "AppliesTo": "under: T:".

In C #, questo è facilmente realizzabile con quanto segue:

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();

2
Grazie per aver fornito il codice di esempio per eseguire questa operazione tramite C #. È un piccolo aiuto per chiunque desideri farlo rapidamente da un'app.
Ayo I

2
Sfortunatamente, il valore "AppliesTo" non sembra avere alcun effetto su una voce "Directory \ Background". Qualcuno sa come è possibile ottenere una limitazione simile facendo clic con il pulsante destro del mouse sullo sfondo di una cartella?
cl0rkster

6

Hai trovato una soluzione più pulita, più semplice e veloce: crea un file di testo, riempilo con questi contenuti, aggiornalo secondo le tue esigenze, salva con il suffisso .reg e lancialo (non ha bisogno dei privilegi di amministratore perché accede alla parte utente del registro ):

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"

In questo modo puoi anche avere un backup della tua configurazione: basta salvare il file .reg in un luogo sicuro. Se modifichi manualmente il registro dopo aver avviato il file, fai clic con il pulsante destro del mouse e seleziona "esporta".

Attenzione ai doppi backspace nel percorso: \\


1

L'unica buona soluzione che ho trovato davvero funzionante è: /superuser/1097054/shell-context-menu-registry-extension-doesnt-work-when-default-program-is-other

Aggiungi chiavi in ​​HKEY_CLASSES_ROOT \ SystemFileAssociations \ your.extension \ shell \ command Modifica l'ultima chiave con il comando che vuoi eseguire.

Per il mio scopo era:

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

Se lo esporto ottengo 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\""

1

Apri il prompt dei comandi [esegui come amministratore] ed esegui questo comando

reg add "HKEY_CLASSES_ROOT\Directory\shell\Refi2\command" /d "powershell.exe -noexit -command Set-Location -literalPath '%V'"
  • -d: valore da eseguire [nome app exe].
  • -v: crea una nuova sottochiave all'interno della chiave di comando.
  • -f: per sovrascrivere forzatamente la chiave se già esistente.
  • powershell.exe -noexit -command Set-Location -literalPath '% V' invece di questo puoi specificare il percorso del tuo exe .

Per maggiori dettagli su altre funzionalità eseguire: -

reg add /?
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.