Функция ShellExecuteExA (shellapi.h)
Выполняет операцию с указанным файлом.
Синтаксис
BOOL ShellExecuteExA(
[in, out] SHELLEXECUTEINFOA *pExecInfo
);
Параметры
[in, out] pExecInfo
Тип: SHELLEXECUTEINFO*
Указатель на структуру SHELLEXECUTEINFO , которая содержит и получает сведения о выполняемом приложении.
Возвращаемое значение
Тип: BOOL
В случае успешного выполнения возвращает значение TRUE ; в противном случае — FALSE. Вызовите GetLastError для получения расширенных сведений об ошибке.
Комментарии
Так как ShellExecuteEx может делегировать выполнение расширениям оболочки (источникам данных, обработчикам контекстного меню, реализациям команд), которые активируются с помощью модели COM, com следует инициализировать перед вызовом ShellExecuteEx . Для некоторых расширений оболочки требуется тип однопотоковых квартир (STA) COM. В этом случае com следует инициализировать, как показано ниже:
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE)
Существуют экземпляры, в которых ShellExecuteEx не использует один из этих типов расширения оболочки, и эти экземпляры вообще не требуют инициализации COM. Тем не менее рекомендуется всегда инициализировать COM перед использованием этой функции.
Когда библиотеки DLL загружаются в процесс, вы получаете блокировку, известную как блокировка загрузчика. Функция DllMain всегда выполняется под блокировкой загрузчика. Важно не вызывать ShellExecuteEx при удержании блокировки загрузчика. Так как ShellExecuteEx является расширяемым, вы можете загрузить код, который не работает должным образом при наличии блокировки загрузчика, что может привести к взаимоблокировке и, следовательно, к неотвеченному потоку.
При использовании нескольких мониторов, если указать HWND и задать элемент lpVerb структуры SHELLEXECUTEINFO , на которую указывает lpExecInfo , значение "Свойства", все окна, созданные командой ShellExecuteEx, могут отображаться в неправильном положении.
Если функция выполняется успешно, элементу hInstApp структуры SHELLEXECUTEINFO присваивается значение больше 32. Если функция завершается сбоем, для hInstApp устанавливается значение ошибки SE_ERR_XXX , которое лучше всего указывает причину сбоя. Хотя hInstApp объявлен как HINSTANCE для совместимости с 16-разрядными приложениями Windows, он не является истинным HINSTANCE. Его можно привести только к int и сравнивать только со значением 32 или кодами ошибок SE_ERR_XXX.
SE_ERR_XXX значения ошибок предоставляются для совместимости с ShellExecute. Чтобы получить более точные сведения об ошибке, используйте GetLastError. Он может возвращать одно из следующих значений.
Ошибка | Описание |
---|---|
ERROR_FILE_NOT_FOUND | Указанный файл не найден. |
ERROR_PATH_NOT_FOUND | Указанный путь не найден. |
ERROR_DDE_FAIL | Сбой транзакции динамического обмена данными (DDE). |
ERROR_NO_ASSOCIATION | Нет приложения, связанного с указанным расширением имени файла. |
ERROR_ACCESS_DENIED | Доступ к указанному файлу запрещен. |
ERROR_DLL_NOT_FOUND | Не удается найти один из файлов библиотеки, необходимых для запуска приложения. |
ERROR_CANCELLED | Функция запрашивала у пользователя дополнительные сведения, но пользователь отменил запрос. |
ERROR_NOT_ENOUGH_MEMORY | Недостаточно памяти для выполнения указанного действия. |
ERROR_SHARING_VIOLATION | Произошло нарушение общего доступа. |
Открытие элементов из URL-адреса Вы можете зарегистрировать приложение для активации при передаче URL-адресов. Вы также можете указать, какие протоколы поддерживает приложение. Дополнительные сведения см. в разделе Регистрация приложений .
Поддержка цепочки сайтов Начиная с Windows 8, вы можете предоставить указатель цепочки сайтов на функцию ShellExecuteEx для поддержки активации элементов с помощью служб с этого сайта. Дополнительные сведения см. в статье Запуск приложений (ShellExecute, ShellExecuteEx, SHELLEXECUTEINFO).
Примечание
Заголовок shellapi.h определяет ShellExecuteEx как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Сочетание использования псевдонима, не зависящий от кодировки, с кодом, не зависящим от кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.
Требования
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Целевая платформа | Windows |
Header | shellapi.h |
Библиотека | Shell32.lib |
DLL | Shell32.dll (версия 3.51 или более поздняя) |
См. также раздел
Запуск приложений (ShellExecute, ShellExecuteEx, SHELLEXECUTEINFO)