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.
CMIC_MASK_HASTITLE
El miembro lpTitle es válido.
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.
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) |