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


Структура SHELLEXECUTEINFOA (shellapi.h)

Содержит сведения, используемые ShellExecuteEx.

Синтаксис

typedef struct _SHELLEXECUTEINFOA {
  DWORD     cbSize;
  ULONG     fMask;
  HWND      hwnd;
  LPCSTR    lpVerb;
  LPCSTR    lpFile;
  LPCSTR    lpParameters;
  LPCSTR    lpDirectory;
  int       nShow;
  HINSTANCE hInstApp;
  void      *lpIDList;
  LPCSTR    lpClass;
  HKEY      hkeyClass;
  DWORD     dwHotKey;
  union {
    HANDLE hIcon;
    HANDLE hMonitor;
  } DUMMYUNIONNAME;
  HANDLE    hProcess;
} SHELLEXECUTEINFOA, *LPSHELLEXECUTEINFOA;

Члены

cbSize

Тип: DWORD

Обязательно. Размер этой структуры в байтах.

fMask

Тип: ULONG

Сочетание одного или нескольких из следующих значений, указывающих на содержимое и допустимость других элементов структуры:

SEE_MASK_DEFAULT (0x00000000) Используйте значения по умолчанию.
SEE_MASK_CLASSNAME (0x00000001) Используйте имя класса, заданное элементом lpClass . Если заданы оба SEE_MASK_CLASSKEY и SEE_MASK_CLASSNAME, используется ключ класса.
SEE_MASK_CLASSKEY (0x00000003) Используйте ключ класса, заданный элементом hkeyClass. Если заданы оба SEE_MASK_CLASSKEY и SEE_MASK_CLASSNAME, используется ключ класса.
SEE_MASK_IDLIST (0x00000004) Используйте список идентификаторов элементов, указанный элементом lpIDList. Элемент lpIDList должен указывать на структуру ITEMIDLIST.
SEE_MASK_INVOKEIDLIST (0x0000000C) Используйте интерфейс IContextMenu контекстного меню выбранного элемента. Используйте lpFile для идентификации элемента по пути к файловой системе или lpIDList для идентификации элемента по его PIDL. Этот флаг позволяет приложениям использовать ShellExecuteExuteEx для вызова verbs из расширений контекстного меню вместо статического verbs списка в реестре.
Примечание. SEE_MASK_INVOKEIDLIST переопределяет и подразумевает SEE_MASK_IDLIST.
SEE_MASK_ICON (0x00000010) Используйте значок, заданный элементом hIcon. Этот флаг нельзя объединить с SEE_MASK_HMONITOR.
Примечание. этот флаг используется только в Windows XP и более ранних версиях. Он игнорируется как Windows Vista.
SEE_MASK_HOTKEY (0x00000020) Используйте сочетание клавиш, заданное элементом dwHotKey .
SEE_MASK_NOCLOSEPROCESS (0x00000040) Используется для указания того, что элемент hProcess получает дескриптор процесса. Обычно этот дескриптор позволяет приложению узнать, когда процесс, созданный с помощью ShellExecuteEx завершается. В некоторых случаях, например, когда выполнение выполняется через беседу DDE, дескриптор не будет возвращен. Вызывающее приложение отвечает за закрытие дескриптора, если он больше не нужен.
SEE_MASK_CONNECTNETDRV (0x00000080) Проверьте общую папку и подключитесь к букве диска. Это обеспечивает повторное подключение отключенных сетевых дисков. Элемент lpFile — это UNC-путь к файлу в сети.
SEE_MASK_NOASYNC (0x00000100) Дождитесь завершения операции выполнения перед возвратом. Этот флаг должен использоваться вызывающими средствами, использующими формы ShellExecute, которые могут привести к асинхронной активации, например DDE, и создать процесс, который может выполняться в фоновом потоке. (Примечание. ShellExecuteEx выполняется в фоновом потоке по умолчанию, если модель потоков вызова не является квартирой.) Вызовы ShellExecuteEx из процессов, уже работающих в фоновых потоках, всегда должны передавать этот флаг. Кроме того, приложения, которые выходят сразу после вызова ShellExecuteExex должны указать этот флаг.

Если операция выполнения выполняется в фоновом потоке, и вызывающий объект не указал флаг SEE_MASK_ASYNCOK, вызывающий поток ожидает, пока новый процесс не начнется до возвращения. Обычно это означает, что был вызван CreateProcess, обмен данными DDE завершен или что делегат пользовательского выполнения уведомил ShellExecuteExecuteEx, что это сделано. Если указан флаг SEE_MASK_WAITFORINPUTIDLE, ShellExecuteEx вызывает вызовы WaitForInputIdle и ожидает, пока новый процесс неактивен до возвращения, с максимальным временем ожидания времени ожидания 1 минуты.

Дополнительные сведения о необходимости этого флага см. в разделе "Примечания".

SEE_MASK_FLAG_DDEWAIT (0x00000100) То же, что и SEE_MASK_NOASYNC, предпочтительнее использовать этот параметр.
SEE_MASK_DOENVSUBST (0x00000200) Разверните все переменные среды, указанные в строке, заданной элементом lpDirectory или lpFile.
SEE_MASK_FLAG_NO_UI (0x00000400) Не отображайте диалоговые окна ошибок пользовательского интерфейса, которые обычно будут отображаться без этого параметра. Запросы безопасности исключены и по-прежнему отображаются.
SEE_MASK_UNICODE (0x00004000) Используйте этот флаг, чтобы указать приложение Юникода.
SEE_MASK_NO_CONSOLE (0x00008000) Используется для наследования консоли родительского элемента для нового процесса вместо создания новой консоли. Это противоположность использованию флага CREATE_NEW_CONSOLE с CreateProcess.
SEE_MASK_ASYNCOK (0x00100000) Выполнение можно выполнить в фоновом потоке, и вызов должен возвращаться немедленно, не ожидая завершения фонового потока. Обратите внимание, что в некоторых случаях ShellExecuteEx игнорирует этот флаг и ожидает завершения процесса перед возвратом.
SEE_MASK_NOQUERYCLASSSTORE (0x01000000) Не используется.
SEE_MASK_HMONITOR (0x00200000) Используйте этот флаг при указании монитора в системах с несколькими мониторами. Монитор указан в элементе hMonitor. Этот флаг нельзя объединить с SEE_MASK_ICON.
SEE_MASK_NOZONECHECKS (0x00800000) Не выполняйте проверку зоны. Этот флаг позволяет ShellExecuteEx обойти проверку зоны, введенную IAttachmentExecute.
SEE_MASK_WAITFORINPUTIDLE (0x02000000) После создания нового процесса подождите, пока процесс неактивен, прежде чем вернуться, с течением минуты ожидания. Дополнительные сведения см. в WaitForInputIdle.
SEE_MASK_FLAG_LOG_USAGE (0x04000000) Указывает на запуск, инициированный пользователем, который позволяет отслеживать часто используемые программы и другие поведения.
SEE_MASK_FLAG_HINST_IS_SITE (0x08000000) Элемент hInstApp используется для указания IUnknown объекта, реализующего IServiceProvider. Этот объект будет использоваться в качестве указателя сайта. Указатель сайта используется для предоставления служб функции ShellExecute , процесса привязки обработчика и вызываемых verb обработчиков.

можно предоставить ICreatingProcess, чтобы разрешить вызывающему объекту изменять некоторые параметры создаваемого процесса.

Этот флаг поддерживается в Windows 8 и более поздних версиях.

Если этот параметр указан, вызов выполняется синхронно в вызывающем потоке.

hwnd

Тип: HWND

Необязательный. Дескриптор окна владельца, используемый для отображения и размещения любого пользовательского интерфейса, который система может производить при выполнении этой функции.

lpVerb

Тип: LPCTSTR

Строка, называемая >, указывающая выполняемое действие. Набор доступных зависит verbs от конкретного файла или папки. Как правило, доступны verbsдействия, доступные в контекстном меню объекта. Этот параметр может иметь значение NULL, в этом случае значение по умолчанию verb используется при наличии. Если нет, используется текст "::no-loc text="open"::". verb Если оно не verb доступно, система использует первую verb из перечисленных в реестре. Если не существует причины ограничить действие verbопределенным, передайте NULL для использования вычисляемого по умолчанию. Это необходимо в некоторых случаях, например при указании SEE_MASK_FLAG_NO_UI и намерении создать пользовательский интерфейс Open With, если приложения не установлены.

Обычно используются следующие verbs компоненты:

  • edit: запускает редактор и открывает документ для редактирования. Если lpFile не является файлом документа, функция завершится ошибкой.
  • explore: просматривает папку, указанную lpFile.
  • find: инициирует поиск, начиная с указанного каталога.
  • open: открывает файл, указанный параметром lpFile . Файл может быть исполняемым файлом, файлом документа или папкой.
  • openas: запускает диалоговое окно "Открыть с помощью", позволяющее пользователю выбрать приложение, с помощью которого открыть файл, указанный параметром lpFile .
  • print: выводит файл документа, указанный lpFile. Если lpFile не является файлом документа, функция завершится ошибкой.
  • properties: отображает свойства файла или папки.
  • runas: запускает приложение от имени администратора. Контроль учетных записей пользователей (UAC) предложит пользователю предоставить согласие на запуск приложения с повышенными привилегиями или ввести учетные данные учетной записи администратора, используемой для запуска приложения.

lpFile

Тип: LPCTSTR

Адрес строки, завершаемой значением NULL, указывающей имя файла или объекта, на котором ShellExecuteExecuteEx выполнит действие, указанное параметром lpVerb. Системный реестр verbs , поддерживаемый функцией ShellExecuteEx , включает ":::no-loc text="open"::" для исполняемых файлов и файлов документов и ":::no-loc text="print":": " для файлов документов, для которых был зарегистрирован обработчик печати. Другие приложения, возможно, добавили оболочку verbs через системный реестр, например ":::no-loc text="play":"" для .avi и .wav файлов. Чтобы указать объект пространства имен Оболочки, передайте полное имя синтаксического анализа и задайте флаг SEE_MASK_INVOKEIDLIST в параметре fMask.

Примечание. Если установлен флаг SEE_MASK_INVOKEIDLIST, можно использовать lpFile или lpIDList, чтобы определить элемент по пути к файловой системе или piDL соответственно. Одно из двух значений —lpFile или lpIDList— необходимо задать.
Примечание. Если путь не включен в имя, предполагается, что текущий каталог.

lpParameters

Тип: LPCTSTR

Необязательный. Адрес строки, завершаемой значением NULL, содержащей параметры приложения. Параметры должны быть разделены пробелами. Если элемент lpFile указывает файл документа, lpParameters должен быть NULL.

lpDirectory

Тип: LPCTSTR

Необязательный. Адрес строки, завершаемой значением NULL, указывающей имя рабочего каталога. Если этот элемент null, текущий каталог используется в качестве рабочего каталога.

nShow

Тип: int

Обязательно. Флаги, указывающие, как приложение должно отображаться при открытии; одно из значений SW_, перечисленных для функции ShellExecute. Если lpFile указывает файл документа, флаг просто передается связанному приложению. Это до приложения, чтобы решить, как его обрабатывать.

hInstApp

Тип: HINSTANCE

[out] Если задано SEE_MASK_NOCLOSEPROCESS, а вызов ShellExecuteExecuteEx выполнен успешно, он задает этому элементу значение больше 32. Если функция завершается ошибкой, она имеет значение ошибки SE_ERR_XXX, указывающее причину сбоя. Хотя hInstApp объявлен как HINSTANCE для совместимости с 16-разрядными приложениями Windows, это не правда HINSTANCE. Его можно привести только к int и по сравнению с 32 или следующими кодами ошибок SE_ERR_XXX.


Код ошибки Причина
SE_ERR_FNF (2) Файл не найден.
SE_ERR_PNF (3) Путь не найден.
SE_ERR_ACCESSDENIED (5) Доступ запрещен.
SE_ERR_OOM (8) Вне памяти.
SE_ERR_DLLNOTFOUND (32) Библиотека динамических ссылок не найдена.
SE_ERR_SHARE (26) Не удается предоставить общий доступ к открытому файлу.
SE_ERR_ASSOCINCOMPLETE (27) Сведения о сопоставлении файлов не завершены.
SE_ERR_DDETIMEOUT (28) Время ожидания операции DDE.
SE_ERR_DDEFAIL (29) Сбой операции DDE.
SE_ERR_DDEBUSY (30) Операция DDE занята.
SE_ERR_NOASSOC (31) Связь с файлами недоступна.

lpIDList

Тип: LPVOID

Адрес абсолютной структуры ITEMIDLIST (PCIDLIST_ABSOLUTE) для хранения списка идентификаторов элементов, который однозначно идентифицирует файл для выполнения. Этот элемент игнорируется, если элемент fMask не включает SEE_MASK_IDLIST или SEE_MASK_INVOKEIDLIST.

lpClass

Тип: LPCTSTR

Адрес строки, завершаемой значением NULL, указывающей одно из следующих значений:

  • A ProgId. Например, "Paint.Picture".
  • Схема протокола URI. Например, http.
  • Расширение файла. Например, ".txt".
  • Путь к реестру в HKEY_CLASSES_ROOT, который называет подраздел, содержащий один или несколько оболочки verbs. Этот раздел будет иметь подраздел, соответствующий схеме реестра оболочкиverb, например имя оболочки\verb.

Этот элемент игнорируется, если fMask не включает SEE_MASK_CLASSNAME.

hkeyClass

Тип: HKEY

Дескриптор раздела реестра для типа файла. Права доступа для этого раздела реестра должны иметь значение KEY_READ. Этот элемент игнорируется, если fMask не включает SEE_MASK_CLASSKEY.

dwHotKey

Тип: DWORD

Сочетание клавиш для связывания с приложением. Слово с низким порядком — это код виртуального ключа, а слово с высоким порядком — это флаг модификатора (HOTKEYF_). Список флагов модификатора см. в описании сообщения WM_SETHOTKEY. Этот элемент игнорируется, если fMask не включает SEE_MASK_HOTKEY.

DUMMYUNIONNAME

DUMMYUNIONNAME.hIcon

Тип: HANDLE

Дескриптор значка для типа файла. Этот элемент игнорируется, если fMask не включает SEE_MASK_ICON. Это значение используется только в Windows XP и более ранних версиях. Он игнорируется как Windows Vista.

DUMMYUNIONNAME.hMonitor

Тип: HANDLE

Дескриптор монитора, на котором должен отображаться документ. Этот элемент игнорируется, если fMask не включает SEE_MASK_HMONITOR.

hProcess

Тип: HANDLE

Дескриптор только что запущенного приложения. Этот элемент устанавливается при возврате и всегда null, если fMask не задано значение SEE_MASK_NOCLOSEPROCESS. Даже если задано значение SEE_MASK_NOCLOSEPROCESS, hProcess будет null, если процесс не был запущен. Например, если документ, который будет запущен, является URL-адресом и экземпляром Internet Explorer уже запущен, он отобразит документ. Новый процесс не запускается, и hProcess будет NULL.

Примечание. ShellExecuteEx не всегда возвращает hProcess, даже если процесс запускается в результате вызова. Например, hProcess не возвращается при использовании SEE_MASK_INVOKEIDLIST для вызова IContextMenu.

Замечания

Флаг SEE_MASK_NOASYNC должен быть указан, если вызывающий поток ShellExecuteEx не имеет цикла сообщений или если поток или процесс завершится вскоре после возвращения ShellExecuteExecuteEx. В таких условиях вызывающий поток не будет доступен для завершения беседы DDE, поэтому важно, чтобы ShellExecute Ex завершить беседу, прежде чем возвращать управление вызывающему приложению. Сбой завершения беседы может привести к неудачном запуску документа.

Если вызывающий поток имеет цикл сообщений и будет существовать некоторое время после вызова ShellExecute Ex возвращается, флаг SEE_MASK_NOASYNC необязателен. Если флаг опущен, для завершения беседы DDE будет использоваться насос сообщения вызывающего потока. Вызывающее приложение быстрее восстанавливает управление, так как беседа DDE может быть завершена в фоновом режиме.

Чтобы включить двойные кавычки в lpParameters, заключите каждую отметку в пару кавычки, как показано в следующем примере.

sei.lpParameters = "An example: \"\"\"quoted text\"\"\"";

В этом случае приложение получает три параметра: , пример:и "кавычки".

Заметка

Заголовок shellapi.h определяет SHELLEXECUTEINFO как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows XP [только классические приложения]
минимальный поддерживаемый сервер Windows 2000 Server [только классические приложения]
заголовка shellapi.h