Compartir a través de


Elección de un método de menú contextual estático o dinámico

Este tema se organiza de la siguiente manera:

Elegir un método verb

Se recomienda encarecidamente implementar un menú contextual mediante uno de los métodos de verbo estáticos.

Métodos de verbo estático

Los verbos estáticos son los verbos más sencillos que se van a implementar, pero siguen proporcionando una funcionalidad enriquecida. Elija siempre el método de menú contextual más sencillo que satisfaga sus necesidades.

Verbo estático Descripción
CreateProcess con parámetros de línea de comandos Este es el medio más sencillo y familiar de implementar un verbo estático. Se invoca un proceso a través de una llamada a la función CreateProcess con los archivos seleccionados y los parámetros opcionales que se pasan como línea de comandos. Se abrirá el archivo o la carpeta.
Este método tiene las siguientes limitaciones:
  • La longitud de la línea de comandos está limitada a 2000 caracteres, lo que limita el número de elementos que el verbo puede controlar.
  • Solo se puede usar con elementos del sistema de archivos.
  • No habilita la reutilización de un proceso ya en ejecución.
  • Requiere que se instale un archivo ejecutable para controlar el verbo.

DropTarget/IDropTarget Una activación de verbo basada en COM significa que admite la activación en proceso o fuera de proceso. DropTarget/IDropTarget también admite el uso de un controlador que ya se está ejecutando cuando un servidor local implementa la interfaz IDropTarget. También expresa perfectamente los elementos a través del objeto de datos serializado y proporciona una referencia a la cadena de sitios invocando para que pueda interactuar con el invocador a través de QueryService.
Windows 7 y versiones posteriores: IExecuteCommand El método de implementación más directo. Dado que se trata de un método de invocación basado en COM (como DropTarget), esta interfaz admite la activación en proceso y fuera de proceso. El verbo implementa IExecuteCommand e IObjectWithSelection y, opcionalmente, IInitializeCommand. Los elementos se pasan directamente como una matriz de elementos de Shell y muchos de los parámetros del invocador están disponibles para la implementación del verbo, incluido el punto de invocación, el estado del teclado, etc.
Windows 7 y versiones posteriores:ExplorerCommand/ IExplorerCommand Habilita los orígenes de datos que proporcionan sus comandos de módulo de comandos a través de IExplorerCommandProvider para usar esos comandos como verbos en un menú contextual. Dado que esta interfaz solo admite la activación en proceso, se recomienda usar los orígenes de datos de Shell que necesitan compartir la implementación entre comandos y menús contextuales.

 

Nota:

IExplorerCommand es un híbrido entre un verbo estático y dinámico. IExplorerCommand se declaró en Windows Vista, pero su capacidad de implementar un verbo en un menú contextual es nuevo en Windows 7.

 

Para obtener más información sobre las consultas de IDropTarget y Shell para los atributos de asociación de archivos, vea Tipos percibidos y registro de aplicaciones.

Métodos de verbo dinámico preferidos

Se prefieren los siguientes métodos de verbo dinámico:

Tipo de verbo Descripción
Verbo estático (enumerado en la tabla anterior) + Sintaxis de consulta avanzada (AQS) Esta opción obtiene visibilidad dinámica del verbo.
Windows 7 y versiones posteriores: IExplorerCommand Esta opción permite una implementación común de verbos y comandos del explorador que se muestran en el módulo de comandos en el Explorador de Windows.
Windows 7 y versiones posteriores: IExplorerCommandState + verbo estático Esta opción también obtiene visibilidad dinámica del verbo. Es un modelo híbrido en el que se usa un controlador en proceso sencillo para calcular si se debe mostrar un verbo estático determinado. Esto se puede aplicar a todos los métodos de implementación de verbo estáticos para lograr un comportamiento dinámico y minimizar la exposición de la lógica en proceso. IExplorerCommandState tiene la ventaja de ejecutarse en un subproceso en segundo plano y, por tanto, evita bloqueos de interfaz de usuario. Es considerablemente más sencillo que IContextMenu.

 

Métodos de verbo dinámicos desalentados

IContextMenu es el método más eficaz, pero también el más complicado de implementar. Se basa en objetos COM en proceso que se ejecutan en el subproceso del autor de la llamada, que normalmente explorador de Windows, pero puede ser cualquier aplicación que hospede los elementos. IContextMenu admite la visibilidad del verbo, el orden y el dibujo personalizado. Algunas de estas características se han agregado a las características de verbo estático, como un icono que se va a asociar a un comando e IExplorerCommand para tratar con la visibilidad.

Si debe extender el menú contextual de un tipo de archivo registrando un verbo dinámico para el tipo de archivo, siga las instrucciones proporcionadas en Personalización de un menú contextual mediante verbos dinámicos.

Extender un menú contextual

Después de elegir un método de verbo, puede extender un menú contextual para un tipo de archivo registrando un verbo estático para el tipo de archivo. Para obtener más información, vea Crear controladores de menú contextual.

Compatibilidad con métodos verbos por sistema operativo

La compatibilidad con métodos de invocación de verbos por sistema operativo se muestra en la tabla siguiente.

Verb (método) Windows XP Windows Vista Windows 7 y versiones posteriores
CreateProcess X X X
DDE X X X
DropTarget X X X
ExecuteCommand X X
ExplorerCommand X
ExplorerCommandState X

 

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

Creación de controladores de menús contextuales

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

Menús contextuales y controladores de menú contextual

Referencia del menú contextual

Verbos y asociaciones de archivos