Функция ShellExecuteA (shellapi.h)
Выполняет операцию в указанном файле.
Синтаксис
HINSTANCE ShellExecuteA(
[in, optional] HWND hwnd,
[in, optional] LPCSTR lpOperation,
[in] LPCSTR lpFile,
[in, optional] LPCSTR lpParameters,
[in, optional] LPCSTR lpDirectory,
[in] INT nShowCmd
);
Параметры
[in, optional] hwnd
Тип: HWND
Дескриптор родительского окна, используемый для отображения сообщений пользовательского интерфейса или ошибок. Это значение может быть null, если операция не связана с окном.
[in, optional] lpOperation
Тип: LPCTSTR
Указатель на строку null-terminated, называемую в данном случае командой, указывающей выполняемое действие. Набор доступных команд зависит от конкретного файла или папки. Как правило, действия, доступные в контекстном меню объекта, доступные в контекстном меню, доступны. Часто используются следующие команды:
редактировать
Запускает редактор и открывает документ для редактирования. Если lpFile не является файлом документа, функция завершится ошибкой.
исследовать
Просматривает папку, указанную lpFile.
находить
Инициирует поиск, начинающийся в каталоге, указанный lpDirectory.
открытый
Открывает элемент, указанный параметром lpFile. Элемент может быть файлом или папкой.
печатать
Выводит файл, указанный lpFile. Если lpFile не является файлом документа, функция завершается ошибкой.
runas
Запускает приложение от имени администратора. Контроль учетных записей пользователей (UAC) предложит пользователю предоставить согласие на запуск приложения с повышенными привилегиями или ввести учетные данные учетной записи администратора, используемой для запуска приложения.
НЕДЕЙСТВИТЕЛЬНЫЙ
По умолчанию используется команда, если она доступна. Если нет, используется команда open. Если ни глаголы не доступны, система использует первую команду, указанную в реестре.
[in] lpFile
Тип: LPCTSTR
Указатель на строку, завершающуюnull, которая указывает файл или объект, на который необходимо выполнить указанную команду. Чтобы указать объект пространства имен Оболочки, передайте полное имя синтаксического анализа. Обратите внимание, что для всех объектов поддерживаются не все команды. Например, не все типы документов поддерживают команду print. Если относительный путь используется для параметра lpDirectory, не используйте относительный путь для lpFile.
[in, optional] lpParameters
Тип: LPCTSTR
Если lpFile указывает исполняемый файл, этот параметр является указателем на строку null-terminated, которая указывает параметры, передаваемые приложению. Формат этой строки определяется командой, которая должна вызываться. Если lpFile указывает файл документа, lpParameters должен быть NULL.
[in, optional] lpDirectory
Тип: LPCTSTR
Указатель на строку null-terminated, указывающую каталог по умолчанию (рабочий) для действия. Если это значение равно null, используется текущий рабочий каталог. Если относительный путь предоставляется в lpFile, не используйте относительный путь для lpDirectory.
[in] nShowCmd
Тип: INT
Флаги, указывающие, как должно отображаться приложение при открытии. Если lpFile указывает файл документа, флаг просто передается связанному приложению. Это до приложения, чтобы решить, как его обрабатывать. Это может быть любое из значений, которые можно указать в параметре nCmdShow для функции ShowWindow.
Возвращаемое значение
Тип: HINSTANCE
Если функция успешно выполнена, она возвращает значение больше 32. Если функция завершается ошибкой, она возвращает значение ошибки, указывающее причину сбоя. Возвращаемое значение приведение в качестве HINSTANCE для обратной совместимости с 16-разрядными приложениями Windows. Это не правда HINSTANCE, однако. Его можно привести только к INT_PTR и по сравнению с 32 или приведенными ниже кодами ошибок.
Возвращаемый код | Описание |
---|---|
|
Операционная система выходит за пределы памяти или ресурсов. |
|
Указанный файл не найден. |
|
Указанный путь не найден. |
|
Недопустимый файл .exe (не win32 .exe или ошибка в образе .exe). |
|
Операционная система отказано в доступе к указанному файлу. |
|
Сопоставление имени файла является неполным или недопустимым. |
|
Не удалось завершить транзакцию DDE, так как обрабатываются другие транзакции DDE. |
|
Сбой транзакции DDE. |
|
Не удалось завершить транзакцию DDE, так как время ожидания запроса истекло. |
|
Указанная библиотека DLL не найдена. |
|
Указанный файл не найден. |
|
Приложение не связано с заданным расширением имени файла. Эта ошибка также будет возвращена при попытке распечатать файл, который не печатается. |
|
Недостаточно памяти для завершения операции. |
|
Указанный путь не найден. |
|
Произошло нарушение общего доступа. |
Вызов GetLastError для получения расширенных сведений об ошибке.
Замечания
Так как ShellExecute может делегировать выполнение расширениям Оболочки (источникам данных, обработчикам контекстного меню, реализации команд), которые активируются с помощью объектной модели компонента (COM), com следует инициализировать перед вызовом ShellExecute. Для некоторых расширений оболочки требуется тип однопоточной квартиры COM (STA). В этом случае COM следует инициализировать, как показано здесь:
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE)
Есть, безусловно, экземпляры, когда ShellExecute не использует одно из этих типов расширения Оболочки, и эти экземпляры не потребуют инициализации COM вообще. Тем не менее, рекомендуется всегда инициализировать COM перед использованием этой функции.
Этот метод позволяет выполнять любые команды в контекстном меню папки или храниться в реестре.
Чтобы открыть папку, используйте любой из следующих вызовов:
ShellExecute(handle, NULL, <fully_qualified_path_to_folder>, NULL, NULL, SW_SHOWNORMAL);
или
ShellExecute(handle, "open", <fully_qualified_path_to_folder>, NULL, NULL, SW_SHOWNORMAL);
Чтобы изучить папку, используйте следующий вызов:
ShellExecute(handle, "explore", <fully_qualified_path_to_folder>, NULL, NULL, SW_SHOWNORMAL);
Чтобы запустить служебную программу поиска оболочки для каталога, используйте следующий вызов.
ShellExecute(handle, "find", <fully_qualified_path_to_folder>, NULL, NULL, 0);
Если lpOperationNULL, функция открывает файл, указанный lpFile. Если lpOperation является "открытым" или "изучением", функция пытается открыть или исследовать папку.
Чтобы получить сведения о приложении, запущенном в результате вызова ShellExecute, используйте ShellExecuteExecuteEx.
Заметка
Заголовок shellapi.h определяет ShellExecute как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows XP [только классические приложения] |
минимальный поддерживаемый сервер | Windows 2000 Server [только классические приложения] |
целевая платформа | Виндоус |
заголовка | shellapi.h |
библиотеки |
Shell32.lib |
DLL | Shell32.dll (версия 3.51 или более поздняя) |
См. также
запуска приложений (ShellExecute, ShellExecuteEx, SHELLEXECUTEINFO)
ShellExecute Ex