ShellExecuteExA 函数 (shellapi.h)

对指定文件执行操作。

语法

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

参数

[in, out] pExecInfo

类型:SHELLEXECUTEINFO*

指向 SHELLEXECUTEINFO 结构的指针,该结构包含并接收有关正在执行的应用程序的信息。

返回值

类型:BOOL

如果成功,则返回 TRUE;否则,FALSE。 调用 GetLastError 以获取扩展的错误信息。

言论

由于 ShellExecuteEx 可以将执行委托给使用组件对象模型(COM)激活的 Shell 扩展(数据源、上下文菜单处理程序、谓词实现),因此应在调用 shellExecuteEx 之前初始化 COM。 某些 Shell 扩展需要 COM 单线程单元 (STA) 类型。 在这种情况下,应初始化 COM,如下所示:

CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE)

在某些情况下,ShellExecuteEx 不使用这些类型的 Shell 扩展之一,并且这些实例根本不需要初始化 COM。 尽管如此,最好在使用此函数之前始终初始化 COM。

当 DLL 加载到进程中时,你将获取一个称为 加载程序锁的锁DllMain 函数始终在加载程序锁下执行。 请务必在按住加载程序锁时不调用 ShellExecuteEx。 由于 ShellExecuteEx 是可扩展的,因此你可以加载在加载程序锁存在的情况下无法正常运行的代码,从而有死锁的风险,因此有无响应的线程。

使用多个监视器时,如果指定 HWND 并设置 SHELLEXECUTEINFO 结构 lpVerb 成员,lpExecInfo 指向“属性”,则由 ShellExecuteEx 创建的任何窗口可能不会出现在正确的位置。

如果函数成功,则会将 SHELLEXECUTEINFO 结构的 hInstApp 成员设置为大于 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、ShellExecuteExecuteEx、SHELLEXECUTEINFO)

注意

shellapi.h 标头将 ShellExecuteEx 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的 约定。

要求

要求 价值
最低支持的客户端 Windows XP [仅限桌面应用]
支持的最低服务器 Windows 2000 Server [仅限桌面应用]
目标平台 窗户
标头 shellapi.h
Shell32.lib
DLL Shell32.dll(版本 3.51 或更高版本)

另请参阅

CoInitializeEx

IShellExecuteHook

启动应用程序(ShellExecute、ShellExecuteEx、SHELLEXECUTEINFO)

ShellExecute