Поделиться через


Структура CMINVOKECOMMANDINFOEX (shobjidl_core.h)

Содержит расширенные сведения о команде контекстного меню. Эта структура является расширенной версией CMINVOKECOMMANDINFO , которая позволяет использовать значения Юникода.

Синтаксис

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;

Члены

cbSize

Тип: DWORD

Размер этой структуры в байтах. Этот элемент должен заполняться вызывающими элементами IContextMenu::InvokeCommand и проверяться реализациями, чтобы знать, что структура является структурой CMINVOKECOMMANDINFOEX , а не CMINVOKECOMMANDINFO.

fMask

Тип: DWORD

Для указания требуемого поведения и использования других полей в структуре задается ноль или один или несколько следующих флагов.

CMIC_MASK_HOTKEY

Допустимый член dwHotKey .

CMIC_MASK_ICON

Допустимый элемент hIcon . В Windows Vista этот флаг не используется.

CMIC_MASK_FLAG_NO_UI

Реализация IContextMenu::InvokeCommand не позволяет отображать элементы пользовательского интерфейса (например, сообщения об ошибках) при выполнении команды.

CMIC_MASK_UNICODE

Обработчик контекстного меню должен использовать элементы lpVerbW, lpParametersW, lpDirectoryW и lpTitleW вместо их эквивалентов ANSI. Так как некоторые обработчики контекстного меню могут не поддерживать Юникод, следует также передать допустимые строки ANSI в члены lpVerb, lpParameters, lpDirectory и lpTitle .

CMIC_MASK_NO_CONSOLE

Если обработчик контекстного меню должен создать новый процесс, он обычно создает новую консоль. Установка флага CMIC_MASK_NO_CONSOLE запрещает создание новой консоли.

CMIC_MASK_HASLINKNAME

Элемент lpTitle содержит полный путь к файлу ярлыка. Используйте в сочетании с CMIC_MASK_HASTITLE.

Примечание Это значение не поддерживается в системах Windows Vista и более поздних версий.
 

CMIC_MASK_HASTITLE

Допустимый элемент lpTitle .

Примечание Это значение не поддерживается в системах Windows Vista и более поздних версий.
 

CMIC_MASK_FLAG_SEP_VDM

Этот флаг действителен только при ссылке на 16-разрядное приложение Windows. Если задано значение , приложение, на которое указывает ярлык, выполняется на частной виртуальной машине DOS (VDM). См. заметки.

CMIC_MASK_ASYNCOK

Реализация IContextMenu::InvokeCommand может отключить новый поток или процесс для обработки вызова и не должна блокироваться при завершении вызываемой функции. Например, если команда "delete", вызов IContextMenu::InvokeCommand может вернуться до удаления всех элементов. Так как это рекомендуется, вызов приложений, указывающих этот флаг, не может гарантировать, что этот запрос будет выполнен, если они не знакомы с реализацией вызываемой команды.

CMIC_MASK_NOASYNC

Windows Vista и более поздних версий. Реализация IContextMenu::InvokeCommand должна быть синхронной, а не возвращать ее до завершения. Так как это рекомендуется, вызов приложений, указывающих этот флаг, не может гарантировать, что этот запрос будет выполнен, если они не знакомы с реализацией вызываемой команды.

CMIC_MASK_SHIFT_DOWN

Нажата клавиша SHIFT. Используйте его вместо опроса текущего состояния клавиатуры, которое могло измениться с момента вызова команды.

CMIC_MASK_CONTROL_DOWN

Нажата клавиша CTRL. Используйте его вместо опроса текущего состояния клавиатуры, которое могло измениться с момента вызова команды.

CMIC_MASK_FLAG_LOG_USAGE

Указывает, что реализации IContextMenu::InvokeCommand может потребоваться отслеживать вызываемый элемент для таких функций, как меню "Последние документы".

CMIC_MASK_NOZONECHECKS

Не выполняйте проверка зоны. Этот флаг позволяет ShellExecuteEx обходить проверку зоны, введенную IAttachmentExecute.

CMIC_MASK_PTINVOKE

Допустимый член ptInvoke .

hwnd

Тип: HWND

Дескриптор окна, являющегося владельцем контекстного меню. Расширение также может использовать этот дескриптор в качестве владельца любых отображаемых окон сообщений или диалоговых окон. Вызывающие стороны должны указать допустимый HWND, который можно использовать в качестве окна владельца для любого отображаемого пользовательского интерфейса. Неуказать HWND при вызове из потока пользовательского интерфейса (с уже созданными окнами) приведет к повторному входу и возможным ошибкам в реализации вызова IContextMenu::InvokeCommand .

lpVerb

Тип: LPCSTR

Адрес строки, завершаемой нулевым значением, которая указывает независимое от языка имя выполняемой команды. Этот член обычно является строкой, когда команда активируется приложением. Система предоставляет предопределенные константы для следующих командных строк.

Константа Командная строка
CMDSTR_RUNAS "RunAs"
CMDSTR_PRINT "Печать"
CMDSTR_PREVIEW "Предварительная версия"
CMDSTR_OPEN "Открыть"
 

Это не фиксированный набор; обработчики контекстного меню могут придумывать новые канонические команды, а приложения могут вызывать их.

Если каноническая команда существует, а обработчик меню не реализует каноническую команду, он должен вернуть код сбоя, чтобы следующий обработчик мог обрабатывать эту команду. Если этого не сделать, в системе будет нарушена функциональность , включая ShellExecute.

Кроме того, вместо указателя этот параметр может иметь значение MAKEINTRESOURCE(offset), где offset — это смещение идентификатора меню выполняемой команды. Реализации могут использовать макрос IS_INTRESOURCE для обнаружения использования этой альтернативы. Оболочка использует этот вариант, когда пользователь выбирает команду меню.

lpParameters

Тип: LPCSTR

Дополнительные параметры. Этот элемент всегда имеет значение NULL для пунктов меню, вставленных расширением оболочки.

lpDirectory

Тип: LPCSTR

Необязательное имя рабочего каталога. Этот элемент всегда имеет значение NULL для пунктов меню, вставленных расширением оболочки.

nShow

Тип: int

Набор SW_ значений, которые передаются в функцию ShowWindow , если команда отображает окно или запускает приложение.

dwHotKey

Тип: DWORD

Необязательное сочетание клавиш для назначения любому приложению, активируемому командой . Если элемент fMask не указывает CMIC_MASK_HOTKEY, этот элемент игнорируется.

hIcon

Тип: HANDLE

Значок, используемый для любого приложения, активированного командой . Если элемент fMask не указывает CMIC_MASK_ICON, этот элемент игнорируется.

lpTitle

Тип: LPCSTR

Заголовок ASCII.

lpVerbW

Тип: LPCWSTR

Команда Юникода для команд, которые могут его использовать.

lpParametersW

Тип: LPCWSTR

Параметры Юникода для команд, которые могут его использовать.

lpDirectoryW

Тип: LPCWSTR

Каталог Юникода для команд, которые могут его использовать.

lpTitleW

Тип: LPCWSTR

Заголовок Юникода.

ptInvoke

Тип: POINT

Точка вызова команды. Если элемент fMask не указывает CMIC_MASK_PTINVOKE, этот элемент игнорируется. Этот элемент недействителен до internet Обозреватель 4.0.

Комментарии

Хотя объявление IContextMenu::InvokeCommand указывает структуруCMINVOKECOMMANDINFO для параметра pici , оно также может принимать структуру CMINVOKECOMMANDINFOEX . При реализации этого метода необходимо проверить cbSize , чтобы определить, какая структура была передана.

По умолчанию все 16-разрядные приложения на базе Windows выполняются как потоки в одном общем VDM. Преимущество запуска по отдельности заключается в том, что при сбое завершается только один VDM; все другие программы, работающие в разных виртуальных машинах, продолжают работать нормально. Кроме того, 16-разрядные приложения windows, которые выполняются в отдельных виртуальных машинах, имеют отдельные очереди ввода. Это означает, что если одно приложение перестает отвечать на запросы, приложения в отдельных виртуальных машинах продолжают получать входные данные. Недостаток запуска по отдельности заключается в том, что для этого требуется значительно больше памяти.

Сам CMINVOKECOMMANDINFOEX определен в Shobjidl.h, но необходимо также включить Shellapi.h, чтобы иметь полный доступ ко всем флагам.

Примечание До выпуска Windows Vista эта структура объявлялась в файле Shlobj.h.
 

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional, Windows XP [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Верхняя часть shobjidl_core.h (включая Shobjidl.h)