Estrutura CMINVOKECOMMANDINFOEX (shobjidl_core.h)

Contém informações estendidas sobre um comando de menu de atalho. Essa estrutura é uma versão estendida de CMINVOKECOMMANDINFO que permite o uso de valores Unicode.

Sintaxe

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;

Membros

cbSize

Tipo: DWORD

O tamanho dessa estrutura, em bytes. Esse membro deve ser preenchido por chamadores de IContextMenu::InvokeCommand e testado pelas implementações para saber que a estrutura é uma estrutura CMINVOKECOMMANDINFOEX em vez de CMINVOKECOMMANDINFO.

fMask

Tipo: DWORD

Zero ou um ou mais dos sinalizadores a seguir são definidos para indicar o comportamento desejado e indicam que outros campos na estrutura devem ser usados.

CMIC_MASK_HOTKEY

O membro dwHotKey é válido.

CMIC_MASK_ICON

O membro hIcon é válido. A partir do Windows Vista, esse sinalizador não é usado.

CMIC_MASK_FLAG_NO_UI

A implementação de IContextMenu::InvokeCommand é impedida de exibir elementos de interface do usuário (por exemplo, mensagens de erro) durante a execução de um comando.

CMIC_MASK_UNICODE

O manipulador de menu de atalho deve usar membros lpVerbW, lpParametersW, lpDirectoryW e lpTitleW em vez de seus equivalentes ANSI. Como alguns manipuladores de menu de atalho podem não dar suporte ao Unicode, você também deve passar cadeias de caracteres ANSI válidas nos membros lpVerb, lpParameters, lpDirectory e lpTitle .

CMIC_MASK_NO_CONSOLE

Se um manipulador de menu de atalho precisar criar um novo processo, ele normalmente criará um novo console. Definir o sinalizador CMIC_MASK_NO_CONSOLE suprime a criação de um novo console.

CMIC_MASK_HASLINKNAME

O membro lpTitle contém um caminho completo para um arquivo de atalho. Use em conjunto com CMIC_MASK_HASTITLE.

Nota Esse valor não tem suporte no Windows Vista e em sistemas posteriores.
 

CMIC_MASK_HASTITLE

O membro lpTitle é válido.

Nota Esse valor não tem suporte no Windows Vista e em sistemas posteriores.
 

CMIC_MASK_FLAG_SEP_VDM

Esse sinalizador é válido somente ao se referir a um aplicativo baseado no Windows de 16 bits. Se definido, o aplicativo para o qual o atalho aponta é executado em uma VDM (Máquina virtual dos DOS) privada. Consulte Observações.

CMIC_MASK_ASYNCOK

A implementação de IContextMenu::InvokeCommand pode desativar um novo thread ou processo para lidar com a chamada e não precisa bloquear a conclusão da função que está sendo invocada. Por exemplo, se o verbo for "delete" a chamada IContextMenu::InvokeCommand poderá retornar antes que todos os itens sejam excluídos. Como isso é aviso, chamar aplicativos que especificam esse sinalizador não pode garantir que essa solicitação será respeitada se eles não estiverem familiarizados com a implementação do verbo que estão invocando.

CMIC_MASK_NOASYNC

Windows Vista e posteriores. A implementação de IContextMenu::InvokeCommand deve ser síncrona, não retornando antes de ser concluída. Como isso é recomendado, chamar aplicativos que especificam esse sinalizador não pode garantir que essa solicitação será respeitada se eles não estiverem familiarizados com a implementação do verbo que estão invocando.

CMIC_MASK_SHIFT_DOWN

A tecla SHIFT está pressionada. Use isso em vez de sondar o estado atual do teclado que pode ter sido alterado desde que o verbo foi invocado.

CMIC_MASK_CONTROL_DOWN

A tecla CTRL está pressionada. Use isso em vez de sondar o estado atual do teclado que pode ter sido alterado desde que o verbo foi invocado.

CMIC_MASK_FLAG_LOG_USAGE

Indica que a implementação de IContextMenu::InvokeCommand pode querer acompanhar o item que está sendo invocado para recursos como o menu "Documentos recentes".

CMIC_MASK_NOZONECHECKS

Não execute um marcar de zona. Esse sinalizador permite que ShellExecuteEx ignore a verificação de zona colocada em prática por IAttachmentExecute.

CMIC_MASK_PTINVOKE

O membro ptInvoke é válido.

hwnd

Digite: HWND

Um identificador para a janela que é o proprietário do menu de atalho. Uma extensão também pode usar esse identificador como o proprietário de qualquer caixa de mensagem ou caixas de diálogo exibidas. Os chamadores devem especificar um HWND legítimo que pode ser usado como a janela de proprietário para qualquer interface do usuário que possa ser exibida. Não especificar um HWND ao chamar de um thread de interface do usuário (um com janelas já criadas) resultará em reentrância e possíveis bugs na implementação de uma chamada IContextMenu::InvokeCommand .

lpVerb

Tipo: LPCSTR

O endereço de uma cadeia de caracteres terminada em nulo que especifica o nome independente do idioma do comando a ser executado. Esse membro normalmente é uma cadeia de caracteres quando um comando está sendo ativado por um aplicativo. O sistema fornece valores constantes predefinidos para as cadeias de caracteres de comando a seguir.

Constante Cadeia de caracteres de comando
CMDSTR_RUNAS "RunAs"
CMDSTR_PRINT "Imprimir"
CMDSTR_PREVIEW "Versão prévia"
CMDSTR_OPEN "Abrir"
 

Este não é um conjunto fixo; novos verbos canônicos podem ser inventados por manipuladores de menu de contexto e os aplicativos podem invocá-los.

Se existir um verbo canônico e um manipulador de menus não implementar o verbo canônico, ele deverá retornar um código de falha para permitir que o próximo manipulador possa lidar com esse verbo. Falha ao fazer isso interromperá a funcionalidade no sistema, incluindo ShellExecute.

Como alternativa, em vez de um ponteiro, esse parâmetro pode ser MAKEINTRESOURCE(offset) em que offset é o deslocamento de identificador de menu do comando a ser realizado. As implementações podem usar a macro IS_INTRESOURCE para detectar que essa alternativa está sendo empregada. O Shell usa essa alternativa quando o usuário escolhe um comando de menu.

lpParameters

Tipo: LPCSTR

Parâmetros opcionais. Esse membro é sempre NULL para itens de menu inseridos por uma extensão do Shell.

lpDirectory

Tipo: LPCSTR

Um nome de diretório de trabalho opcional. Esse membro é sempre NULL para itens de menu inseridos por uma extensão do Shell.

nShow

Tipo: int

Um conjunto de valores SW_ a serem passados para a função ShowWindow se o comando exibir uma janela ou iniciar um aplicativo.

dwHotKey

Tipo: DWORD

Um atalho de teclado opcional a ser atribuído a qualquer aplicativo ativado pelo comando . Se o membro fMask não especificar CMIC_MASK_HOTKEY, esse membro será ignorado.

hIcon

Tipo: HANDLE

Um ícone a ser usado para qualquer aplicativo ativado pelo comando . Se o membro fMask não especificar CMIC_MASK_ICON, esse membro será ignorado.

lpTitle

Tipo: LPCSTR

Um título ASCII.

lpVerbW

Tipo: LPCWSTR

Um verbo Unicode, para os comandos que podem usá-lo.

lpParametersW

Tipo: LPCWSTR

Um parâmetro Unicode, para os comandos que podem usá-lo.

lpDirectoryW

Tipo: LPCWSTR

Um diretório Unicode, para os comandos que podem usá-lo.

lpTitleW

Tipo: LPCWSTR

Um título Unicode.

ptInvoke

Tipo: POINT

O ponto em que o comando é invocado. Se o membro fMask não especificar CMIC_MASK_PTINVOKE, esse membro será ignorado. Esse membro não é válido antes da Internet Explorer 4.0.

Comentários

Embora a declaração IContextMenu::InvokeCommand especifique uma estrutura CMINVOKECOMMANDINFO para o parâmetro pici , ela também pode aceitar uma estrutura CMINVOKECOMMANDINFOEX . Se você estiver implementando esse método, deverá inspecionar cbSize para determinar qual estrutura foi passada.

Por padrão, todos os aplicativos baseados no Windows de 16 bits são executados como threads em uma única VDM compartilhada. A vantagem de executar separadamente é que uma falha encerra apenas a VDM única; quaisquer outros programas em execução em VDMs distintas continuam funcionando normalmente. Além disso, aplicativos baseados no Windows de 16 bits executados em VDMs separadas têm filas de entrada separadas. Isso significa que, se um aplicativo parar de responder momentaneamente, os aplicativos em VDMs separadas continuarão a receber entrada. A desvantagem de executar separadamente é que isso requer muito mais memória.

O próprio CMINVOKECOMMANDINFOEX é definido em Shobjidl.h, mas você também deve incluir Shellapi.h para ter acesso total a todos os sinalizadores.

Nota Antes do Windows Vista, essa estrutura era declarada em Shlobj.h.
 

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 2000 Professional, Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows 2000 Server [somente aplicativos da área de trabalho]
Cabeçalho shobjidl_core.h (inclua Shobjidl.h)