shellExecuteExA 函数 (shellapi.h)
对指定文件执行操作。
语法
BOOL ShellExecuteExA(
[in, out] SHELLEXECUTEINFOA *pExecInfo
);
参数
[in, out] pExecInfo
类型: SHELLEXECUTEINFO*
指向 SHELLEXECUTEINFO 结构的指针,该结构包含和执行的应用程序的相关信息。
返回值
类型: BOOL
如果成功,则返回 TRUE ;否则为 FALSE。 调用 GetLastError 以获取扩展错误信息。
注解
由于 ShellExecuteEx 可以将执行委托给 Shell 扩展, (数据源、上下文菜单处理程序、动词实现) 使用组件对象模型 (COM) 激活,因此应在调用 ShellExecuteEx 之前初始化 COM。 某些 Shell 扩展需要 COM 单线程单元 (STA) 类型。 在这种情况下,应初始化 COM,如下所示:
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE)
在某些情况下 ,ShellExecuteEx 不使用这些类型的 Shell 扩展之一,并且这些实例根本不需要初始化 COM。 尽管如此,最好在使用此函数之前始终初始化 COM。
将 DLL 加载到进程中时,你将获取一个称为 加载程序锁的锁。 DllMain 函数始终在加载程序锁下执行。 请务必不要在按住加载程序锁时调用 ShellExecuteEx 。 由于 ShellExecuteEx 是可扩展的,因此可以加载在加载程序锁的存在中无法正常运行的代码,从而危及死锁,因此有无响应线程。
使用多个监视器时,如果指定 HWND 并将 lpExECUTEINFO 结构中的 lpVerb 成员设置为“属性”,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 function 的站点链指针,以支持使用该站点中的服务进行项激活。 有关详细信息 ,请参阅启动应用程序 (ShellExecute、ShellExecuteEx、SHELLEXECUTEINFO) 。
注意
shellapi.h 标头将 ShellExecuteEx 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非中性编码别名与非非编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅 函数原型的约定。
要求
最低受支持的客户端 | Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows |
标头 | shellapi.h |
Library | Shell32.lib |
DLL | Shell32.dll (版本 3.51 或更高版本) |