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 标识项。 此标志允许应用程序使用
ShellExecuteEx
从快捷菜单扩展而不是注册表中列出的静态谓词调用谓词。
注意:
SEE_MASK_INVOKEIDLIST重写并表示SEE_MASK_IDLIST。
SEE_MASK_NOCLOSEPROCESS (0x00000040)
用于指示
hProcess
成员接收进程句柄。 此句柄通常用于允许应用程序找出何时使用
ShellExecuteEx
终止创建的进程。 在某些情况下,例如通过 DDE 会话满足执行时,不会返回句柄。 调用应用程序负责在不再需要句柄时关闭句柄。
SEE_MASK_CONNECTNETDRV (0x00000080)
验证共享并连接到驱动器号。 这允许重新连接断开连接的网络驱动器。
lpFile
成员是网络上文件的 UNC 路径。
SEE_MASK_NOASYNC (0x00000100)
等待执行操作在返回之前完成。 使用 ShellExecute 表单(例如 DDE)的调用方应使用此标志,并创建可能在后台线程上运行的进程。 (注意:如果调用方线程模型不是 Apartment,
则 ShellExecuteEx
默认在后台线程上运行。) 从已在后台线程上运行的进程调用
ShellExecuteEx
应始终传递此标志。 此外,调用
ShellExecuteEx
后立即退出的应用程序应指定此标志。
如果在后台线程上执行执行操作,并且调用方未指定SEE_MASK_ASYNCOK标志,则调用线程会在返回之前等待新进程启动。 这通常意味着已调用
CreateProcess
、DDE 通信已完成,或者自定义执行委托已通知
ShellExecuteEx
已完成。 如果指定了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)
使用此标志指示 Unicode 应用程序。
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
成员用于指定实现
IServiceProvider
的对象
IUnknown
。 此对象将用作网站指针。 站点指针用于向
ShellExecute
函数、处理程序绑定过程和调用谓词处理程序提供服务。
若要在
Windows 8
之前在操作系统中使用SEE_MASK_FLAG_HINST_IS_SITE,请在程序中手动定义它:#define SEE_MASK_FLAG_HINST_IS_SITE 0x08000000。
如果指定此选项,则调用将在调用线程上同步运行。
类型:
HWND
可选。 所有者窗口的句柄,用于显示和定位系统在执行此函数时可能生成的任何 UI。
lpVerb
类型:
LPCTSTR
一个字符串,称为
谓词
,指定要执行的操作。 可用谓词集取决于特定文件或文件夹。 通常,对象快捷菜单中可用的操作是可用的谓词。 此参数可以为
NULL
,在这种情况下,使用默认谓词(如果可用)。 否则,将使用“open”谓词。 如果两个谓词都不可用,则系统将使用注册表中列出的第一个谓词。 通常使用以下谓词:
编辑
:启动编辑器并打开文档进行编辑。 如果
lpFile
不是文档文件,函数将失败。
浏览
:浏览
lpFile
指定的文件夹。
find
:从指定目录开始启动搜索。
打开
:打开
由 lpFile
参数指定的文件。 该文件可以是可执行文件、文档文件或文件夹。
打印
:打印
lpFile
指定的文档文件。 如果
lpFile
不是文档文件,函数将失败。
属性
:显示文件或文件夹的属性。
runas
:以管理员身份启动应用程序。 用户帐户控制 (UAC) 将提示用户同意运行提升的应用程序,或输入用于运行应用程序的管理员帐户的凭据。
lpFile
类型:
LPCTSTR
以 null 结尾的字符串的地址,指定
ShellExecuteEx
将对其执行
lpVerb
参数指定的操作的文件或对象的名称。
ShellExecuteEx function
支持的系统注册表谓词包括可执行文件和文档文件的“open”,以及已为其注册打印处理程序的文档文件的“print”。 其他应用程序可能已通过系统注册表添加 Shell 谓词,例如用于.avi和 .wav 文件的“播放”。 若要指定 Shell 命名空间对象,请传递完全限定分析名称,并在
fMask
参数中设置
SEE_MASK_INVOKEIDLIST
标志。
注意:
如果设置了
SEE_MASK_INVOKEIDLIST
标志,则可以使用
lpFile
或
lpIDList
按其文件系统路径或 PIDL 分别标识该项。 必须设置两个值之一(
lpFile
或
lpIDList
)。
注意:
如果名称不包含路径,则假定当前目录。
lpParameters
类型:
LPCTSTR
可选。 包含应用程序参数的以 null 结尾的字符串的地址。 参数必须用空格分隔。 如果
lpFile
成员指定文档文件,
则 lpParameters
应为
NULL
。
lpDirectory
类型:
LPCTSTR
可选。 指定工作目录名称的以 null 结尾的字符串的地址。 如果此成员为
NULL
,则当前目录用作工作目录。
nShow
类型:
int
必需。 指定应用程序在打开时显示方式的标志;
ShellExecute
函数列出的SW_值之一。 如果
lpFile
指定文档文件,则标志将直接传递给关联的应用程序。 由应用程序决定如何处理它。
hInstApp
类型:
HINSTANCE
[out]如果设置了SEE_MASK_NOCLOSEPROCESS并且
ShellExecuteEx
调用成功,它将此成员设置为大于 32 的值。 如果函数失败,则设置为指示失败原因的SE_ERR_XXX错误值。 尽管
hInstApp 被声明为 HINSTANCE
,以便与 16 位 Windows 应用程序兼容,但它不是真正的 HINSTANCE。 它只能转换为
int
,并且与以下SE_ERR_XXX错误代码进行比较。
lpIDList
类型:
LPVOID
绝对
ITEMIDLIST
结构的地址 (PCIDLIST_ABSOLUTE) 包含唯一标识要执行的文件的项目标识符列表。 如果
fMask
成员不包括
SEE_MASK_IDLIST
或
SEE_MASK_INVOKEIDLIST
,则忽略此成员。
lpClass
类型:
LPCTSTR
以 null 结尾的字符串的地址,指定以下字符串之一:
ProgId。 例如,“Paint.Picture”。
URI 协议方案。 例如,“http”。
文件扩展名。 例如,“.txt”。
HKEY_CLASSES_ROOT下的注册表路径,用于命名包含一个或多个 Shell 谓词的子项。 此键将具有符合 Shell 谓词注册表架构的子项,例如
shell
\
谓词名称
。
如果
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
。 即使
fMask
设置为
SEE_MASK_NOCLOSEPROCESS
,如果未启动任何进程,
hProcess
也将为
NULL
。 例如,如果要启动的文档是 URL,并且 Internet Explorer 的实例已经运行,它将显示该文档。 未启动新进程,
hProcess
将为
NULL
。
如果调用
ShellExecuteEx
的线程没有消息循环,或者线程或进程将在
ShellExecuteEx
返回后不久终止,则必须指定
SEE_MASK_NOASYNC
标志。 在这种情况下,调用线程将不能用于完成 DDE 对话,因此在将控件返回到调用应用程序之前
,ShellExecuteEx
完成会话非常重要。 未能完成对话可能会导致文档启动失败。
如果调用线程有消息循环,并且调用
ShellExecuteEx
返回后将存在一段时间,
则SEE_MASK_NOASYNC
标志是可选的。 如果省略标志,则调用线程的消息泵将用于完成 DDE 对话。 调用应用程序会更快地重新获得控制权,因为可以在后台完成 DDE 对话。
若要在
lpParameters
中包含双引号,请将每个标记括在一对引号中,如以下示例所示。
sei.lpParameters = "An example: \"\"\"quoted text\"\"\"";
在这种情况下,应用程序会收到三个参数:一个、示例:和“带引号的文本”。
shellapi.h 标头将 SHELLEXECUTEINFO 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非中性编码别名与非非编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅 函数原型的约定。