Структура 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.
CMIC_MASK_HASTITLE
Допустимый элемент lpTitle .
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 2000 Professional, Windows XP [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Верхняя часть | shobjidl_core.h (включая Shobjidl.h) |