Cómo agregar un elemento del menú contextual al Explorador de Windows para carpetas [cerrado]


100

He descubierto cómo agregar elementos del menú contextual del botón derecho a los archivos en el Explorador de Windows, agregando claves al registro. Es decir, puedo hacer clic derecho en un archivo en el Explorador y ejecutar una aplicación personalizada en ese archivo.

Me gustaría hacer lo mismo con una carpeta y no he encontrado la manera de hacerlo (todavía). Veo artículos sobre cómo crear / escribir controladores de menús contextuales personalizados, pero prefiero no ir allí.

He encontrado un artículo aquí sobre cómo agregar elementos de menú contextual en cascada al escritorio y al "Equipo" en el Explorador, pero esto no funciona para ninguna carpeta.

Me gustaría poder agregar mi aplicación personalizada al menú contextual y hacer que funcione tanto en archivos como en carpetas. ¿Hay alguna forma de hacer esto sin escribir un controlador de menú contextual?


Encontré la solución en el siguiente artículo, que describe cómo hacer esto a través del registro de archivos, así como de carpetas:

Los dos artículos siguientes proporcionaron información y opciones adicionales:


1
¡¿Esta pregunta ha estado abierta durante 6 años ?! ¿Quién lo cerró hace seis días?
Andrew

Lo ÚNICO que no me gusta de StackOverflow son los payasos cerrando preguntas o marcando preguntas como fuera de tema.
Michael

Respuestas:


209

En el editor de registro ( regedit.exe) busque:

  • Menú contextual para hacer clic derecho en carpetas en el panel izquierdo del Explorador de Windows o en el fondo de un directorio en el panel derecho:

    1. HKEY_CLASSES_ROOT\Directory\Background\shell si eres administrador
    2. HKEY_CURRENT_USER\Software\Classes\directory\Background\shell si eres un usuario normal
  • Menú contextual para hacer clic derecho en carpetas en el panel derecho del Explorador de Windows:

    1. HKEY_CLASSES_ROOT\Directory\shell si eres administrador
    2. HKEY_CURRENT_USER\Software\Classes\directory\shell si eres un usuario normal
  • Menú contextual para cualquier archivo:

    1. HKEY_CLASSES_ROOT\*\shell si eres administrador
    2. HKEY_CURRENT_USER\Software\Classes\*\shell si eres un usuario normal

En todos los casos:

  1. agregue una nueva clave debajo shell, nombrándola como desea nombrar el elemento del menú contextual
  2. agregue una nueva clave dentro de esta clave, llamada command(nombre obligatorio)
  3. edite la defaultpropiedad en commandpara myprogrampath\path\path\executable.exe %1pasar la ruta del archivo y el nombre del archivo seleccionado a su programa personalizado

Más personalización:

  • Agregar icono : agregue un valor de cadena con el nombre iconde la clave creada en el paso 1 con un valor que coincida con una ruta de recurso de icono. También puede proporcionar argumentos enteros para especificar qué icono utilizar. Ejemplo:%SystemRoot%\System32\shell32.dll,3
  • Mostrar solo al hacer clic en mayúsculas : agrega un valor de cadena vacía con el nombre Extendedde la clave creada en el paso 1
  • Personalizar la etiqueta de entrada del menú : cambie el valor del valor predeterminado para la clave creada en el paso 1
  • Cambiar localidad entrada de menú : añadir un valor de cadena denominado Positioncon uno de: Top,Bottom

2
HKEY_CLASSES_ROOT\Directory\Background\shellsolo puede afectar el clic derecho en el fondo de un directorio
Amos

21
Debería ser "%1"en caso de que la ruta tenga espacios.
Blrp

3
inmediatamente. Ni siquiera es necesario abrir una nueva ventana del explorador: las nuevas configuraciones se cargan tan pronto como hace clic con el botón derecho.
Jumpjack

1
Parece que las variables de entorno no funcionan Command, ¿ verdad ?
Jack Lu

14
Con respecto a mi comentario anterior: el problema se puede solucionar reemplazando %1por %V.
Michael Herrmann

10

Volví y también respondí esto en otro tema, ya que no parece haber mucho sobre esta pregunta específicamente.

Encontré que la forma más sencilla era agregar un valor de cadena a la clave llamada "AppliesTo" y establecer su valor en "debajo: {ruta}"

En mi ejemplo, quiero que solo se vea en la unidad T, por lo que mi valor de cadena es "AppliesTo": "under: T:".

En C #, esto se logra fácilmente con lo siguiente:

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
Gracias por proporcionar código de muestra para hacer esto a través de C #. Es una pequeña ayuda para cualquiera que quiera hacer esto rápidamente desde una aplicación.
Ayo I

2
Desafortunadamente, el valor de "AppliesTo" no parece tener ningún efecto en una entrada de "Directory \ Background". ¿Alguien sabe cómo se puede lograr una limitación similar al hacer clic derecho en el fondo de una carpeta?
cl0rkster

6

Encontré una solución más limpia, fácil y rápida: cree un archivo de texto, llénelo con estos contenidos, actualícelo a sus necesidades, guárdelo con el sufijo .reg y ejecútelo (no necesita privilegios de administrador porque accede a la parte del usuario 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"

De esta manera también puede tener una copia de seguridad de su configuración: simplemente guarde el archivo .reg en un lugar seguro. Si edita manualmente el registro después de iniciar el archivo, haga clic con el botón derecho y seleccione "exportar".

Tenga cuidado con los retrocesos dobles en la ruta: \\


1

La única buena solución que encontré que realmente funciona es: /superuser/1097054/shell-context-menu-registry-extension-doesnt-work-when-default-program-is-other

Agregue claves en HKEY_CLASSES_ROOT \ SystemFileAssociations \ your.extension \ shell \ command Modifique la última clave con el comando que desea hacer.

Para mi propósito fue:

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

Si lo exporto, obtengo 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

Abra el símbolo del sistema [ejecutar como administrador] y ejecute este comando

reg add "HKEY_CLASSES_ROOT\Directory\shell\Refi2\command" /d "powershell.exe -noexit -command Set-Location -literalPath '%V'"
  • -d: valor para ejecutar [nombre de la aplicación exe].
  • -v: crea una nueva subclave dentro de la tecla de comando.
  • -f: para anular con fuerza la clave si ya existe.
  • powershell.exe -noexit -command Set-Location -literalPath '% V' en lugar de esto, puede especificar la ruta de su exe .

Para obtener más detalles sobre más funciones, ejecute: -

reg add /?
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.