Compartir a través de


Estructura CMINVOKECOMMANDINFOEX (shobjidl_core.h)

Contiene información extendida sobre un comando de menú contextual. Esta estructura es una versión extendida de CMINVOKECOMMANDINFO que permite el uso de valores Unicode.

Sintaxis

typedef struct _CMINVOKECOMMANDINFOEX {
  DWORD   cbSize;
  DWORD   fMask;
  HWND    hwnd;
  LPCSTR  lpVerb;
  LPCSTR  lpParameters;
  LPCSTR  lpDirectory;
  int     nShow;
  DWORD   dwHotKey;
  HANDLE  hIcon;
  LPCSTR  lpTitle;
  LPCWSTR lpVerbW;
  LPCWSTR lpParametersW;
  LPCWSTR lpDirectoryW;
  LPCWSTR lpTitleW;
  POINT   ptInvoke;
} CMINVOKECOMMANDINFOEX;

Miembros

cbSize

Tipo: DWORD

Tamaño de esta estructura, en bytes. Los autores de llamadas de IContextMenu::InvokeCommand deben rellenar este miembro y probarlos para saber que la estructura es una estructura CMINVOKECOMMANDINFOEX en lugar de CMINVOKECOMMANDINFOINFO.

fMask

Tipo: DWORD

Cero, o uno o varios de los siguientes marcadores se establecen para indicar el comportamiento deseado e indicar que se van a usar otros campos de la estructura.

CMIC_MASK_HOTKEY

El miembro dwHotKey es válido.

CMIC_MASK_ICON

El miembro hIcon es válido. A partir de Windows Vista, esta marca no se usa.

CMIC_MASK_FLAG_NO_UI

La implementación de IContextMenu::InvokeCommand no puede mostrar elementos de la interfaz de usuario (por ejemplo, mensajes de error) mientras se lleva a cabo un comando.

CMIC_MASK_UNICODE

El controlador de menú contextual debe usar miembros lpVerbW, lpParametersW, lpDirectoryW y lpTitleW en lugar de sus equivalentes ANSI. Dado que algunos controladores de menú contextual pueden no admitir Unicode, también debe pasar cadenas ANSI válidas en los miembros lpVerb, lpParameters, lpDirectory y lpTitle .

CMIC_MASK_NO_CONSOLE

Si un controlador de menú contextual necesita crear un nuevo proceso, normalmente creará una nueva consola. Al establecer la marca CMIC_MASK_NO_CONSOLE , se suprime la creación de una nueva consola.

CMIC_MASK_HASLINKNAME

El miembro lpTitle contiene una ruta de acceso completa a un archivo de acceso directo. Use junto con CMIC_MASK_HASTITLE.

Nota Este valor no se admite en Windows Vista ni en sistemas posteriores.
 

CMIC_MASK_HASTITLE

El miembro lpTitle es válido.

Nota Este valor no se admite en Windows Vista ni en sistemas posteriores.
 

CMIC_MASK_FLAG_SEP_VDM

Esta marca solo es válida cuando se hace referencia a una aplicación basada en Windows de 16 bits. Si se establece, la aplicación a la que apunta el acceso directo se ejecuta en una máquina VIRTUAL DOS privada (VDM). Vea la sección Comentarios.

CMIC_MASK_ASYNCOK

La implementación de IContextMenu::InvokeCommand puede poner en marcha un nuevo subproceso o proceso para controlar la llamada y no es necesario bloquear la finalización de la función que se está invocando. Por ejemplo, si el verbo es "delete", la llamada IContextMenu::InvokeCommand puede devolver antes de que se hayan eliminado todos los elementos. Puesto que se trata de un aviso, llamar a las aplicaciones que especifican esta marca no puede garantizar que esta solicitud se respetará si no están familiarizados con la implementación del verbo que invocan.

CMIC_MASK_NOASYNC

Windows Vista y versiones posteriores. La implementación de IContextMenu::InvokeCommand debe ser sincrónica, no devolver antes de que se complete. Puesto que esto se recomienda, llamar a las aplicaciones que especifican esta marca no puede garantizar que esta solicitud se respetará si no están familiarizados con la implementación del verbo que están invocando.

CMIC_MASK_SHIFT_DOWN

Se presiona la tecla MAYÚS. Úselo en lugar de sondear el estado actual del teclado que puede haber cambiado desde que se invocó el verbo.

CMIC_MASK_CONTROL_DOWN

Se presiona la tecla CTRL. Úselo en lugar de sondear el estado actual del teclado que puede haber cambiado desde que se invocó el verbo.

CMIC_MASK_FLAG_LOG_USAGE

Indica que la implementación de IContextMenu::InvokeCommand podría querer realizar un seguimiento del elemento que se invoca para características como el menú "Documentos recientes".

CMIC_MASK_NOZONECHECKS

No realice una comprobación de zona. Esta marca permite que ShellExecuteEx omita la comprobación de zona puesta en marcha por IAttachmentExecute.

CMIC_MASK_PTINVOKE

El miembro ptInvoke es válido.

hwnd

Tipo: HWND

Identificador de la ventana que es el propietario del menú contextual. Una extensión también puede usar este identificador como propietario de los cuadros de mensaje o cuadros de diálogo que muestra. Los autores de llamadas deben especificar un HWND legítimo que se pueda usar como ventana de propietario para cualquier interfaz de usuario que se pueda mostrar. Si no se especifica un HWND al llamar desde un subproceso de interfaz de usuario (uno con windows ya creado) se producirán reentradas y posibles errores en la implementación de una llamada A IContextMenu::InvokeCommand .

lpVerb

Tipo: LPCSTR

Dirección de una cadena terminada en null que especifica el nombre independiente del idioma del comando que se va a llevar a cabo. Este miembro suele ser una cadena cuando una aplicación activa un comando. El sistema proporciona valores constantes predefinidos para las siguientes cadenas de comandos.

Constante Cadena de comandos
CMDSTR_RUNAS "RunAs"
CMDSTR_PRINT "Imprimir"
CMDSTR_PREVIEW "Versión preliminar"
CMDSTR_OPEN "Abrir"
 

Esto no es un conjunto fijo; Los nuevos verbos canónicos se pueden inventar mediante controladores de menú contextual y las aplicaciones pueden invocarlos.

Si existe un verbo canónico y un controlador de menús no implementa el verbo canónico, debe devolver un código de error para permitir que el controlador siguiente pueda controlar este verbo. Si no lo hace, se interrumpirá la funcionalidad en el sistema, incluido ShellExecute.

Como alternativa, en lugar de un puntero, este parámetro puede ser MAKEINTRESOURCE(offset) donde offset es el desplazamiento del identificador de menú del comando que se va a llevar a cabo. Las implementaciones pueden usar la macro IS_INTRESOURCE para detectar que se está utilizando esta alternativa. El Shell usa esta alternativa cuando el usuario elige un comando de menú.

lpParameters

Tipo: LPCSTR

Parámetros opcionales. Este miembro siempre es NULL para los elementos de menú insertados por una extensión shell.

lpDirectory

Tipo: LPCSTR

Un nombre de directorio de trabajo opcional. Este miembro siempre es NULL para los elementos de menú insertados por una extensión shell.

nShow

Tipo: int

Un conjunto de SW_ valores que se van a pasar a la función ShowWindow si el comando muestra una ventana o inicia una aplicación.

dwHotKey

Tipo: DWORD

Método abreviado de teclado opcional para asignar a cualquier aplicación activada por el comando . Si el miembro fMask no especifica CMIC_MASK_HOTKEY, este miembro se omite.

hIcon

Tipo: HANDLE

Icono que se va a usar para cualquier aplicación activada por el comando . Si el miembro fMask no especifica CMIC_MASK_ICON, este miembro se omite.

lpTitle

Tipo: LPCSTR

Un título ASCII.

lpVerbW

Tipo: LPCWSTR

Un verbo Unicode, para los comandos que pueden usarlo.

lpParametersW

Tipo: LPCWSTR

Parámetros Unicode para esos comandos que pueden usarlo.

lpDirectoryW

Tipo: LPCWSTR

Un directorio Unicode, para los comandos que pueden usarlo.

lpTitleW

Tipo: LPCWSTR

Un título Unicode.

ptInvoke

Tipo: POINT

Punto donde se invoca el comando. Si el miembro fMask no especifica CMIC_MASK_PTINVOKE, este miembro se omite. Este miembro no es válido antes de Internet Explorer 4.0.

Comentarios

Aunque la declaración IContextMenu::InvokeCommand especifica una estructura CMINVOKECOMMANDINFO para el parámetro pici , también puede aceptar una estructura CMINVOKECOMMANDINFOEX . Si va a implementar este método, debe inspeccionar cbSize para determinar qué estructura se ha pasado.

De forma predeterminada, todas las aplicaciones basadas en Windows de 16 bits se ejecutan como subprocesos en un único VDM compartido. La ventaja de ejecutarse por separado es que un bloqueo solo finaliza el VDM único; cualquier otro programa que se ejecute en máquinas virtuales distintas seguirá funcionando con normalidad. Además, las aplicaciones basadas en Windows de 16 bits que se ejecutan en máquinas virtuales independientes tienen colas de entrada independientes. Esto significa que si una aplicación deja de responder momentáneamente, las aplicaciones de máquinas virtuales independientes siguen recibiendo entradas. La desventaja de ejecutarse por separado es que se necesita mucho más memoria para hacerlo.

El propio CMINVOKECOMMANDINFOEX se define en Shobjidl.h, pero también debe incluir Shellapi.h para tener acceso completo a todas las marcas.

Nota Antes de Windows Vista, esta estructura se declaró en Shlobj.h.
 

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional, Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Encabezado shobjidl_core.h (include Shobjidl.h)