shellExecuteExA 函数 (shellapi.h)

对指定文件执行操作。

语法

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

参数

[in, out] pExecInfo

类型: SHELLEXECUTEINFO*

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

返回值

类型: BOOL

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

注解

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

CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE)

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

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

对于多个监视器,如果指定 HWND 并将 lpExecInfo 指向的 SHELLEXECUTEINFO 结构的 lpVerb 成员设置为“Properties”ShellExecuteExecuteEx 创建的任何窗口可能不会显示在正确位置。

如果函数成功,它将 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 开始,你可以提供指向 ShellExecuteExecuteEx 函数的网站链指针,以支持通过该网站的服务激活项目。 有关详细信息 ,请参阅 (ShellExecute、ShellExecuteExecuteEx、SHELLEXECUTEINFO) 启动应用程序

注意

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

要求

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

另请参阅

CoInitializeEx

IShellExecuteHook

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

ShellExecute