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


Функция ShellExecuteExA (shellapi.h)

Выполняет операцию в указанном файле.

Синтаксис

BOOL ShellExecuteExA(
  [in, out] SHELLEXECUTEINFOA *pExecInfo
);

Параметры

[in, out] pExecInfo

Тип: SHELLEXECUTEINFO*

Указатель на структуру SHELLEXECUTEINFO, содержащую и получающую информацию о выполняемом приложении.

Возвращаемое значение

Тип: BOOL

Возвращает TRUE в случае успешного выполнения; в противном случае FALSE. Вызов GetLastError для получения расширенных сведений об ошибке.

Замечания

Так как ShellExecuteEx может делегировать выполнение расширениям Оболочки (источникам данных, обработчикам контекстного меню, реализации команд), которые активируются с помощью объектной модели компонента (COM), COM следует инициализировать перед вызовом ShellExecuteEx. Для некоторых расширений оболочки требуется тип однопоточной квартиры COM (STA). В этом случае COM следует инициализировать, как показано здесь:

CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE)

Существуют экземпляры, в которых ShellExecuteEx не использует одно из этих типов расширения Оболочки, и эти экземпляры не требуют инициализации COM вообще. Тем не менее, рекомендуется всегда инициализировать COM перед использованием этой функции.

Когда библиотеки DLL загружаются в процесс, вы получаете блокировку, известную как блокировка блокировки загрузчика. Функция DllMain всегда выполняется под блокировкой загрузчика. Важно не вызывать ShellExecuteExecuteEx при удержании блокировки загрузчика. Так как ShellExecuteEx расширяем, вы можете загрузить код, который не работает должным образом в присутствии блокировки загрузчика, рискуя взаимоблокировкой и поэтому неответствующим потоком.

При использовании нескольких мониторов, если указать HWND и задать член структуры SHELLEXECUTEINFO, на которую указывает lpExecInfo "Свойства", все окна, созданные ShellExecuteExecuteEx, могут не отображаться в правильном положении.

Если функция выполнена успешно, она задает 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 [только классические приложения]
целевая платформа Виндоус
заголовка shellapi.h
библиотеки Shell32.lib
DLL Shell32.dll (версия 3.51 или более поздняя)

См. также

CoInitializeEx

IShellExecuteHook

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

ShellExecute