ShellExecuteExA 函数 (shellapi.h)
对指定文件执行操作。
语法
BOOL ShellExecuteExA(
[in, out] SHELLEXECUTEINFOA *pExecInfo
);
参数
[in, out] pExecInfo
类型:SHELLEXECUTEINFO*
指向 SHELLEXECUTEINFO 结构的指针,该结构包含并接收有关正在执行的应用程序的信息。
返回值
类型:BOOL
如果成功,则返回 TRUE;否则,FALSE。 调用 GetLastError 以获取扩展的错误信息。
言论
由于
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 或更高版本) |