ShellExecuteA 函数 (shellapi.h)
对指定文件执行操作。
语法
HINSTANCE ShellExecuteA(
[in, optional] HWND hwnd,
[in, optional] LPCSTR lpOperation,
[in] LPCSTR lpFile,
[in, optional] LPCSTR lpParameters,
[in, optional] LPCSTR lpDirectory,
[in] INT nShowCmd
);
参数
[in, optional] hwnd
类型:HWND
用于显示 UI 或错误消息的父窗口的句柄。 如果操作未与窗口关联,则可以 NULL。
[in, optional] lpOperation
类型:LPCTSTR
指向 null终止字符串的指针,在本例中称为 谓词,指定要执行的操作。 可用谓词集取决于特定文件或文件夹。 通常,对象快捷菜单中可用的操作是可用的谓词。 通常使用以下谓词:
编辑
启动编辑器并打开文档进行编辑。 如果 lpFile 不是文档文件,则函数将失败。
探讨
浏览由 lpFile指定的文件夹。
找到
从 lpDirectory指定的目录中启动搜索。
打开
打开由 lpFile 参数指定的项。 该项可以是文件或文件夹。
打印
打印由 lpFile指定的文件。 如果 lpFile 不是文档文件,则函数将失败。
runas
以管理员身份启动应用程序。 用户帐户控制(UAC)将提示用户同意运行提升的应用程序,或输入用于运行应用程序的管理员帐户的凭据。
零
如果使用默认谓词(如果可用)。 如果没有,则使用“open”谓词。 如果两个谓词都不可用,系统将使用注册表中列出的第一个谓词。
[in] lpFile
类型:LPCTSTR
指向 null终止字符串的指针,该字符串指定要对其执行指定谓词的文件或对象。 若要指定 Shell 命名空间对象,请传递完全限定分析名称。 请注意,并非所有谓词都支持所有对象。 例如,并非所有文档类型都支持“print”谓词。 如果将相对路径用于 lpDirectory 参数,则不对 lpFile使用相对路径。
[in, optional] lpParameters
类型:LPCTSTR
如果 lpFile 指定可执行文件,则此参数是指向 null终止字符串的指针,该字符串指定要传递给应用程序的参数。 此字符串的格式由要调用的谓词确定。 如果 lpFile 指定文档文件,lpParameters 应 NULL。
[in, optional] lpDirectory
类型:LPCTSTR
指向 null终止字符串的指针,该字符串指定操作的默认(工作)目录。 如果此值 NULL,则使用当前工作目录。 如果在 lpFile提供相对路径,请不要将相对路径用于 lpDirectory。
[in] nShowCmd
类型:INT
指定在打开应用程序时如何显示应用程序的标志。 如果 lpFile 指定文档文件,则标志将直接传递给关联的应用程序。 由应用程序决定如何处理它。 它可以是 ShowWindow 函数的 nCmdShow 参数中指定的任何值。
返回值
类型:HINSTANCE
如果函数成功,则返回大于 32 的值。 如果函数失败,它将返回一个错误值,该值指示失败的原因。 返回值被强制转换为 HINSTANCE,以实现与 16 位 Windows 应用程序的向后兼容性。 然而,这不是真正的欣斯坦斯。 只能将其强制转换为 INT_PTR,并将其与下面的 32 或以下错误代码进行比较。
返回代码 | 描述 |
---|---|
|
操作系统内存不足或资源。 |
|
找不到指定的文件。 |
|
找不到指定的路径。 |
|
.exe 文件无效(.exe 映像中不存在 Win32 .exe 或错误)。 |
|
操作系统拒绝访问指定文件。 |
|
文件名关联不完整或无效。 |
|
无法完成 DDE 事务,因为正在处理其他 DDE 事务。 |
|
DDE 事务失败。 |
|
无法完成 DDE 事务,因为请求超时。 |
|
找不到指定的 DLL。 |
|
找不到指定的文件。 |
|
没有与给定文件扩展名关联的应用程序。 如果尝试打印不可打印的文件,也会返回此错误。 |
|
没有足够的内存来完成操作。 |
|
找不到指定的路径。 |
|
发生共享冲突。 |
调用 GetLastError 以获取扩展的错误信息。
言论
由于
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE)
当然,在某些情况下,ShellExecute 不使用这些类型的 Shell 扩展之一,并且这些实例根本不需要初始化 COM。 尽管如此,最好在使用此函数之前 始终 初始化 COM。
此方法允许你在文件夹的快捷菜单中执行任何命令或存储在注册表中。
若要打开文件夹,请使用以下任一调用:
ShellExecute(handle, NULL, <fully_qualified_path_to_folder>, NULL, NULL, SW_SHOWNORMAL);
或
ShellExecute(handle, "open", <fully_qualified_path_to_folder>, NULL, NULL, SW_SHOWNORMAL);
若要浏览文件夹,请使用以下调用:
ShellExecute(handle, "explore", <fully_qualified_path_to_folder>, NULL, NULL, SW_SHOWNORMAL);
若要为目录启动 Shell 的 Find 实用工具,请使用以下调用。
ShellExecute(handle, "find", <fully_qualified_path_to_folder>, NULL, NULL, 0);
如果 lpOperationNULL,则该函数将打开由 lpFile指定的文件。 如果 lpOperation 为“open”或“explore”,则函数将尝试打开或浏览文件夹。
若要获取由于调用 ShellExecute而启动的应用程序的信息,请使用 ShellExecuteEx。
注意
shellapi.h 标头将 ShellExecute 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows XP [仅限桌面应用] |
支持的最低服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | 窗户 |
标头 | shellapi.h |
库 | Shell32.lib |
DLL | Shell32.dll(版本 3.51 或更高版本) |