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 de verbo

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

Métodos de verbo estáticos

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. Un proceso se invoca a través de una llamada a la función CreateProcess con los archivos seleccionados y los parámetros opcionales pasados 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 fuera de 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 fuera de 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 que lo usen 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 IDropTarget y Shell para los atributos de asociación de archivos, vea Tipos percibidos y registro de aplicaciones.

Métodos de verbo dinámicos 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. Se trata de un modelo híbrido en el que se usa un controlador sencillo en proceso para calcular si un verbo estático determinado se debe displyed. 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 no recomendables

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 suele ser el Explorador de Windows, pero puede ser cualquier aplicación que hospede los elementos. IContextMenu admite visibilidad de verbos, ordenación y 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 ampliar 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 ampliar 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 los métodos de verbo por sistema operativo

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

Verbo (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 verbos de selección múltiple

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

Verbos y asociaciones de archivos