Verbos y asociaciones de archivos

Cuando un usuario hace clic con el botón derecho en un objeto Shell como un archivo, el Shell muestra un menú contextual (contextual). Este menú contiene una lista de comandos que el usuario puede seleccionar para realizar diversas acciones en el elemento. Estos comandos también se conocen como elementos de menú contextual o verbos. Los menús contextuales se pueden personalizar.

Este tema se organiza de la siguiente manera:

Introducción a los menús contextuales para objetos del sistema de archivos

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 objeto del sistema de archivos, como un archivo o una carpeta.

En el ejemplo siguiente se muestra un menú contextual predeterminado que se muestra haciendo clic con el botón derecho en MyFile.xyz-ms.

captura de pantalla del menú contextual predeterminado

El motivo por el que aparece un menú contextual predeterminado para MyFile.xyz-ms se debe al hecho de que .xyz-ms no es miembro de un tipo de archivo registrado. Por el contrario, .txt es un tipo de archivo registrado. Si hace clic con el botón derecho en un archivo .txt , verá un menú contextual con tres comandos adicionales en su sección superior: Imprimir, Editar y Abrir con.

captura de pantalla del menú contextual de un archivo con un tipo de archivo registrado

Para ampliar el menú contextual de un tipo de archivo, debe crear una entrada del Registro para cada comando. Un enfoque más sofisticado es implementar un controlador de menú contextual (verbo), que permite ampliar el menú contextual de un tipo de archivo en un archivo a archivo. Para obtener más información, vea Crear controladores de menú contextual y Referencia de menú contextual.

Agregar comandos a un menú contextual

Un controlador de menú contextual es un controlador de tipo de archivo que agrega comandos a un menú contextual existente. Los controladores de menú contextual están asociados a un tipo de archivo y se llaman cada vez que se muestra un menú contextual para un miembro de la clase. Shell comprueba el registro para ver si el tipo de archivo está asociado a cualquier controlador de menú contextual. Si es así, shell consulta a los controladores para obtener elementos de menú contextual adicionales.

Verbos del menú contextual

Cada comando del menú contextual se identifica en el Registro por su verbo. Estos verbos son los mismos que los que usa ShellExecuteEx al iniciar aplicaciones mediante programación.

Un verbo es una cadena de texto simple que usa shell para identificar el comando asociado. Cada verbo corresponde a la cadena de comandos usada para iniciar el comando en una ventana de consola o archivo por lotes (.bat).

Por ejemplo, el verbo abierto normalmente inicia un programa para abrir un archivo. Normalmente, la cadena de comandos tiene el siguiente aspecto:

"My Program.exe" "%1"

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

Los verbos también pueden tener un nombre para mostrar asociado, que se muestra en el menú contextual en lugar de la propia cadena de verbo. Por ejemplo, la cadena de presentación de openas es Open With. Al igual que las cadenas de menú normales, incluido un carácter de y comercial en la cadena de presentación permite la selección de teclado del comando.

Transmitir elementos del sistema que no son archivos y resultados de OpenSearch.

En Windows 7 y versiones posteriores, hay compatibilidad con la conexión de orígenes externos al cliente de Windows a través del protocolo OpenSearch . Esto permite a los usuarios buscar en un almacén de datos remoto y ver los resultados desde el Explorador de Windows. El estándar OpenSearch v1.1 define formatos de archivo simples que se pueden usar para describir cómo un cliente debe consultar el servicio web para el almacén de datos y cómo debe devolver los resultados que el cliente debe representar.

Es posible que tenga que transmitir elementos del sistema que no son de archivo para evitar la necesidad de descargar elementos en el caso de los resultados de OpenSearch . La característica de búsqueda federada permite buscar elementos desde ubicaciones del sistema que no son de archivos que admiten OpenSearch, como SharePoint y otros sitios respaldados por servicios web, por ejemplo. Al invocar verbos en estos elementos, el sistema descarga una versión temporal del elemento y la pasa a la implementación del verbo. Se recomienda que los implementadores de verbos eviten la necesidad de descargar el archivo registrando el conjunto de esquemas de dirección URL que admite el verbo para transmitir los elementos. Los verbos lo hacen mediante la clave del Registro SupportedProtocols .

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

Definir elementos de menú contextual para un tipo de archivo determinado le permite especificar cómo la aplicación asociada abre un miembro del tipo de archivo. Sin embargo, 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 está asociado a la aplicación. Registra el procedimiento predeterminado de la misma manera que registra los elementos de menú contextual. Para obtener información más detallada sobre cómo definir elementos de menú contextual, vea Crear controladores de 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 está abriendo 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 con un tipo de archivo adicional, esa clase tendrá estas características. Si el tipo de archivo adicional estaba asociado anteriormente a otra aplicación, estas características reemplazarán a los originales.

Para registrar el procedimiento predeterminado, coloque las mismas claves del Registro que creó para el ProgID de la 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.

En la siguiente entrada del Registro de ejemplo se muestra un procedimiento predeterminado 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
   MyProgram.exe
      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"

Recursos adicionales

Procedimientos recomendados para controladores de menú contextual y verbos de selección múltiple

Elección de un verbo estático o dinámico para el menú contextual

Creación de controladores de menús contextuales

Personalización de un menú contextual mediante verbos dinámicos

Menús contextuales (contextuales) y controladores de menú contextual

Referencia del menú contextual