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


Функция 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 или более поздняя)

См. также раздел

CoInitializeEx

IShellExecuteHook

Запуск приложений (ShellExecute, ShellExecuteEx, SHELLEXECUTEINFO)

ShellExecute