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


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

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

Синтаксис

BOOL ShellExecuteExW(
  [in, out] SHELLEXECUTEINFOW *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 кодами ошибок.

Для совместимости с ShellExecute предоставляются SE_ERR_XXX значения ошибок. Чтобы получить более точные сведения об ошибках, используйте 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