Compartir a través de


Extender menús contextuales

Al hacer clic con el botón derecho en un objeto normalmente se muestra un menú contextual. Este menú contiene una lista de comandos que el usuario puede seleccionar para realizar diversas acciones en el objeto . Esta sección es una introducción a los menús contextuales para objetos del sistema de archivos.

Puede encontrar información adicional aquí:

Menús de acceso directo para objetos del sistema de archivos

Cuando un usuario hace clic con el botón derecho en un objeto, como un archivo, que se muestra en el Explorador de Windows o en el escritorio, aparece un menú contextual con una lista de comandos. Después, el usuario puede realizar una acción en el archivo, como abrirlo o eliminarlo, seleccionando el comando adecuado.

Dado que a menudo se usan menús contextuales para la administración de archivos, Shell proporciona un conjunto de comandos predeterminados, como Cortar y copiar, que aparecen en el menú contextual de cualquier archivo. Tenga en cuenta que, aunque Open With es un comando predeterminado, no se muestra para algunos tipos de archivo estándar, como .wav. En la siguiente ilustración del directorio Mis documentos de ejemplo, que también se usó como ejemplo en Personalización de iconos, se muestra un menú contextual predeterminado que se mostró haciendo clic con el botón derecho en MyDocs4.xyz.

captura de pantalla del menú contextual predeterminado para objetos del sistema de archivos

La razón por la que MyDocs4.xyz muestra un menú contextual predeterminado es que no es miembro de un tipo de archivo registrado. Por otro lado, .txt es un tipo de archivo registrado. Si hace clic con el botón derecho en uno de los archivos de .txt, verá un menú contextual con dos comandos adicionales en su sección superior: Abrir e imprimir.

captura de pantalla del menú contextual personalizado para objetos del sistema de archivos

Una vez registrado un tipo de archivo, puede ampliar su menú contextual con comandos adicionales. Se muestran encima de los comandos predeterminados cuando se hace clic con el botón derecho en cualquier archivo de ese tipo. Aunque la mayoría de los comandos agregados de esta manera son comunes, como Imprimir o Abrir, puede agregar cualquier comando que un usuario pueda resultar útil.

Todo lo que es necesario para ampliar el menú contextual de un tipo de archivo es crear una entrada del Registro para cada comando. Un enfoque más sofisticado es implementar un controlador de menú contextual, que permite ampliar el menú contextual de un tipo de archivo por archivo. Para obtener más información, vea Crear controladores de menú contextual.

Verbos del menú contextual

Cada comando del menú contextual se identifica en el Registro por su verb. Estos verbos son los mismos que los usados por ShellExex al iniciar aplicaciones mediante programación. Para obtener más información sobre el uso de ShellExecuteEx, consulte la explicación en Inicio de aplicaciones.

Una verb es una cadena de texto simple que Shell usa para identificar el comando asociado. Cada verb corresponde a la cadena de comandos usada para ejecutar el comando en una ventana de consola o en un archivo por lotes (.bat). Por ejemplo, la aperturaverb normalmente inicia un programa para abrir un archivo. Su cadena de comandos suele tener un aspecto similar al siguiente:

"My Program.exe" "%1"

"%1" es el marcador de posición estándar para un parámetro de línea de comandos proporcionado con el nombre de archivo. Por ejemplo, puede especificar una página determinada para mostrarla en una vista con pestañas.

Nota:

Si algún elemento de la cadena de comandos contiene o puede contener espacios, debe incluirse entre comillas. De lo contrario, si el elemento contiene un espacio, no se analizará correctamente. Por ejemplo, "Mi Program.exe" iniciará la aplicación correctamente. Si usa My Program.exe, el sistema intentará iniciar "My" con "Program.exe" como su primer argumento de línea de comandos. Siempre debe usar comillas con argumentos como "%1" que se expanden a cadenas mediante Shell, ya que no puede estar seguro de que la cadena no contendrá un espacio.

 

Los verbos también pueden tener una cadena de visualización asociada, que se muestra en el menú de acceso rápido en lugar de la cadena verb propia. Por ejemplo, la cadena para mostrar de openas es Open With. Al igual que las cadenas de menú normales, incluir un ampersand (&) en la cadena de visualización permite la selección mediante teclado del comando.

Verbos canónicos

En general, las aplicaciones son responsables de proporcionar cadenas de visualización localizadas para los verbos que definen. Sin embargo, para proporcionar un grado de independencia del lenguaje, el sistema define un conjunto estándar de verbos usados comúnmente denominados verbos canónicos. Un elemento canónico verb se puede usar con cualquier idioma, y el sistema genera automáticamente una cadena de visualización correctamente localizada. Por ejemplo, la cadena de visualización de openverb se establecerá en Abrir en un sistema en inglés y en Öffnen en un sistema alemán.

Los verbos canónicos incluyen:

Importancia Descripción
abrir Abre el archivo o la carpeta.
opennew Abre el archivo o la carpeta en una nueva ventana.
Impresión Imprime el archivo.
explorar Abre el Explorador de Windows con la carpeta seleccionada.
encontrar Abre el cuadro de diálogo Búsqueda de Windows con la carpeta establecida como ubicación de búsqueda predeterminada.
openas Abre el cuadro de diálogo Abrir con .
Propiedades Abre la hoja de propiedades del objeto.

 

El printto verb también es canónico, pero nunca se muestra. Permite al usuario imprimir un archivo arrastrándolo a un objeto de impresora.

Verbos extendidos

Cuando el usuario hace clic con el botón derecho en un objeto, el menú contextual contiene todos los verbos normales. Sin embargo, podría haber comandos que desea admitir, pero que no se muestren en todos los menús contextuales. Por ejemplo, podría tener comandos que no se usan normalmente o que están diseñados para usuarios experimentados. Por este motivo, también puede definir uno o varios verbos extendidos. Estos verbos también son cadenas de caracteres y son similares a los verbos normales. Se distinguen de verbos normales por la forma en que se registran. Para tener acceso a los comandos asociados a verbos extendidos, el usuario debe hacer clic con el botón derecho en un objeto mientras presiona la tecla MAYÚS. Los verbos extendidos se mostrarán junto con los verbos normales.

Ampliación del menú contextual para un tipo de archivo

La manera más sencilla de extender el menú contextual de un tipo de archivo es con el Registro. Para ello, agregue una Shell subclave debajo de la clave para progID de la aplicación asociada al tipo de archivo. Opcionalmente, puede definir un valor predeterminado verb para el tipo de archivo, definiéndolo como el valor predeterminado de la subclave Shell.

El valor predeterminado verb se muestra primero en el menú contextual. Su propósito es proporcionar al Shell un verb que pueda usar cuando se llame a ShellExecuteEx, pero no se especifique verb. El Shell no selecciona necesariamente el verb predeterminado cuando ShellExecuteEx se usa de esta manera. Para las Shellversiones 5.0 y posteriores, disponibles en los sistemas Windows 2000 y siguientes, Shell utiliza la primera verb disponible de la siguiente lista. Si no hay ninguna disponible, se produce un error en la operación.

  • Abrir verb
  • Valor predeterminado verb
  • La primera verb del registro
  • Openwith verb

En el caso Shell de las versiones anteriores a la versión 5.0, omita el tercer elemento.

Debajo de la Shell subclave, cree una subclave para cada una de las verb que quiera agregar. Cada una de estas subclaves tendrá un valor REG_SZ establecido en la cadena de presentación del elemento representado por verb. Puede omitir la cadena de visualización para verbos canónicos porque el sistema mostrará automáticamente una cadena localizada correctamente. Si omite la cadena de visualización para los verbos no canónicos, se mostrará la cadena verb. Para cada verb subclave, cree una subclave de comando con el valor predeterminado establecido en la cadena de comandos.

En la ilustración siguiente se muestra un menú contextual para el tipo de archivo .myp usado en Tipos de archivo y Personalización de iconos. Ahora cuenta con los verbos abrir, doit, print y printto en su menú contextual, siendo doit el predeterminado verb. El menú contextual tiene este aspecto.

captura de pantalla del menú contextual personalizado

Las entradas del Registro usadas para ampliar el menú contextual que se muestra en la ilustración anterior son:

HKEY_CLASSES_ROOT
   .myp
      (Default) = MyProgram.1
   MyProgram.1
      (Default) = MyProgram Application
      Shell
         (Default) = doit
         open
            command
               (Default) = C:\MyDir\MyProgram.exe "%1"
         doit
            (Default) = &Do It
            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" %3 %4

Aunque el comando Abrir con está por encima del primer separador, el sistema lo crea automáticamente y no requiere una entrada del Registro. El sistema crea automáticamente nombres de visualización para los verbos canónicos abrir e imprimir. Dado que doit no es canónico verb, se le asigna un nombre para mostrar, "&Do It", que se puede seleccionar presionando la tecla D. El printto verb no aparece en el menú contextual, sino que permite al usuario imprimir archivos colocandolos en un icono de impresora. En este ejemplo, %1 representa el nombre de archivo y %2 el nombre de la impresora.

Los verbos se pueden suprimir mediante la configuración de políticas agregando un valor de SuppressionPolicy a la clave de verb. Establezca el valor de SuppressionPolicy en el identificador de directiva. Si la directiva está activada, se suprimen verb y su entrada de menú contextual asociada. Para conocer los posibles valores de identificador de directiva, consulte la enumeración RESTRICTIONS .

Extensión del menú contextual para objetos predefinidos Shell

Muchos objetos predefinidos Shell tienen menús contextuales que se pueden ampliar. Registre el comando de la misma manera que registra los tipos de archivo típicos, pero use el nombre del objeto predefinido como nombre de tipo de archivo.

Puede encontrar una lista de objetos predefinidos en la sección Objetos predefinidos Shell de Creación Shell de controladores de extensión. Esos objetos predefinidos Shell cuyos menús contextuales se pueden ampliar agregando verbos en el Registro se marcan en la tabla con la palabra "Verb".

Registro de una aplicación para controlar tipos de archivo arbitrarios

En las secciones anteriores de este documento se ha explicado cómo definir elementos de menú contextual para un tipo de archivo determinado. Entre otras cosas, definir el menú contextual permite especificar cómo abre la aplicación asociada un miembro del tipo de archivo. Sin embargo, como se describe en Tipos de archivo, las aplicaciones también pueden registrar un procedimiento predeterminado independiente que se usará cuando un usuario intenta usar la aplicación para abrir un tipo de archivo que no haya asociado a la aplicación. Este tema se describe aquí porque registra el procedimiento predeterminado de la misma manera que registra los elementos del menú contextual.

El procedimiento predeterminado sirve para dos propósitos básicos. Uno es especificar cómo se debe invocar la aplicación para abrir un tipo de archivo arbitrario. Por ejemplo, podría usar una marca de línea de comandos para indicar que se abre un tipo de archivo desconocido. El otro propósito es definir las diversas características de un tipo de archivo, como los elementos de menú contextual y el icono. Si un usuario asocia la aplicación a un tipo de archivo adicional, ese tipo tendrá estas características. Si el tipo de archivo adicional estaba asociado anteriormente a otra aplicación, estas características reemplazarán los originales.

Para registrar el procedimiento predeterminado, coloque las mismas claves de registro que creó para el ProgID de su aplicación en la subclave de la aplicación de HKEY_CLASSES_ROOT\Applications. También puede incluir un valor FriendlyAppName para proporcionar al sistema un nombre descriptivo para la aplicación. El nombre descriptivo de la aplicación también se puede extraer de su archivo ejecutable, pero solo si el valor FriendlyAppName está ausente. El siguiente fragmento del Registro muestra un procedimiento predeterminado de ejemplo para MyProgram.exe que define un nombre descriptivo y varios elementos de menú contextual. Las cadenas de comandos incluyen la marca /a para notificar a la aplicación que está abriendo un tipo de archivo arbitrario. Si incluye una subclave DefaultIcon , debe usar un icono genérico.

HKEY_CLASSES_ROOT
   Applications
      MyProgram.exe
         FriendlyAppName = Friendly Name
         shell
            open
               command
                  (Default) = C:\MyDir\MyProgram.exe /a "%1"
            print
               command
                  (Default) = C:\MyDir\MyProgram.exe /a /p "%1"
            printto
               command
                  (Default) = C:\MyDir\MyProgram.exe /a /p "%1" "%2" %3 %4

Extensión del nuevo submenú

Cuando un usuario abre el menú Archivo en el Explorador de Windows, el primer comando es Nuevo. Al seleccionar este comando se muestra un submenú. De forma predeterminada, contiene dos comandos, Carpeta y Acceso directo, que permiten a los usuarios crear subcarpetas y accesos directos. Este submenú se puede extender para incluir comandos de creación de archivos para cualquier tipo de archivo.

Para agregar un comando de creación de archivos al submenú Nuevo , los archivos de la aplicación deben tener un tipo de archivo asociado. Incluya una subclave ShellNew en la clave de la extensión de nombre de archivo. Cuando se selecciona el comando Nuevo del menú Archivo, lo añadirá al submenú Nuevo. La cadena de presentación del comando será la cadena descriptiva asignada al ProgID del programa.

Asigne uno o varios valores de datos a la subclave ShellNew para especificar el método de creación de archivos. A continuación se muestran los valores disponibles.

Importancia Descripción
Comando Ejecuta una aplicación. Se trata de un valor REG_SZ que especifica la ruta de acceso de la aplicación que se va a ejecutar. Por ejemplo, puede programarlo para iniciar un asistente.
Datos Crea un archivo que contiene los datos especificados. Los datos son un valor de REG_BINARY con los datos del archivo. Los datos se omiten si se especifica NullFile o FileName.
NombreDeArchivo Crea un archivo que es una copia de un archivo especificado. FileName es un valor de REG_SZ, establecido en la ruta completa del fichero que se va a copiar.
NullFile Crea un archivo vacío. NullFile no tiene un valor asignado. Si se especifica NullFile, se omiten los valores Data y FileName.

 

En la ilustración siguiente se muestra el submenú Nuevo para el tipo de archivo .myp que se usa como ejemplo en Tipos de archivo y Personalización de iconos. Ahora dispone de un comando, MyProgram Application. Cuando un usuario selecciona Aplicación MyProgram en el submenú Nuevo , crea Shell un archivo denominado "New MyProgram Application.myp" y lo pasa a MyProgram.exe.

captura de pantalla del menú nuevo personalizado

La entrada del Registro ahora es la siguiente:

HKEY_CLASSES_ROOT
   .myp
      (Default) = MyProgram.1
      MyProgram.1
         ShellNew
            NullFile
   MyProgram.1
      (Default) = MyProgram Application
      DefaultIcon
         (Default) = C:\MyDir\MyProgram.exe,2
      Shell
         (Default) = doit
         open
            command
               (Default) = C:\MyDir\MyProgram.exe "%1"
         doit
            (Default) = &Do It
            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" %3 %4