使用样例:
#include <Windows.h>
#include <shellapi.h>
#pragma comment(lib,"Shell32.lib")
void test()
{
//ShellExecute是内部是通过使用Windows Shell提供的COM接口实现的,必须初始化COM
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
// 使用windows资源管理器打开"D:\我的文件" 目录
ShellExecute(NULL, TEXT("open"), TEXT("D:\\我的文件"), NULL, NULL, SW_SHOWNORMAL);
// 在"D:\我的文件" 打开搜索功能
ShellExecute(NULL, TEXT("find"), TEXT("D:\\我的文件"), NULL, NULL, 0);
// 使用默认浏览器打开https://www.youkuaiyun.com/
ShellExecute(NULL, TEXT("open"), TEXT("https://www.youkuaiyun.com/"), NULL, NULL, 0);
// 关闭COM
CoUninitialize();
}
API参数解释:
HINSTANCE ShellExecute(
HWND hwnd,
LPCSTR lpOperation,
LPCSTR lpFile,
LPCSTR lpParameters,
LPCSTR lpDirectory,
INT nShowCmd
);
/// \param hwnd 父窗口。如果没有或继承当前ui风格可设置为NULL
/// \param lpOperation 为下列之一的字符串
/// edit(打开编辑器编辑指定的文档,第三个参数为必须为文件,否则此函数失败)
/// explorer(在资源管理器中打开文件文件夹,第三个参数为文件夹)
/// find(在文件夹中打开使用搜索,第三个参数为文件夹)
/// open(打开第三个参数指定的文件或文件夹,第三个参数为文件或文件夹)
/// print(打印指定的文件,如果第三个参数不是文件,此函数失败)
/// runas(以管理员身份启动一个exe程序,可能需要输入密码以确认身份,第三个参数为可执行文件路径)
/// null(使用的上述默认的动作或open动作或者注册表中的第一个动作,The default verb is used, if available. If not, the "open" verb is used. If neither verb is available, the system uses the first verb listed in the registry.)
/// \param lpFile 取决于第二个参数,注意:可以使用快捷方式等
/// \param lpParameters 如果是启动exe程序,此参数为其命令行参数
/// \param lpDirectory 指定动作的工作目录,如果为NULL,使用默认工作目录。如果第三个参数使用的是相对路径,此参数不可再用相对路径
/// \param nShowCmd 指定执行指定动作的程序窗口打开方式:
/// SW_HIDE (0) 隐藏
/// SW_MAXIMIZE (3) 最大化
/// SW_MINIMIZE (6) 最小化
/// SW_RESTORE (9) 如果指定的窗口默认处于最大化或最小化,则恢复正常窗口化
/// SW_SHOW (5) 使用默认的窗口显示方式
/// SW_SHOWDEFAULT (10) 和调用程序相同的显示方式,参考当前程序使用CreateProcess时的STARTUPINFO结构中的SW_ 标志位
/// SW_SHOWMAXIMIZED (3) 激活并最大化
/// SW_SHOWMINIMIZED (2) 激活并最小化
/// SW_SHOWMINNOACTIVE (7) 当前激活窗口不变化,最小化
/// SW_SHOWNA (8) 当前激活窗口不变化,默认大小
/// SW_SHOWNOACTIVATE (4) 当前激活窗口不变化,,使用上次打开此窗口时的大小
/// SW_SHOWNORMAL (1) 激活并:如果指定的窗口默认处于最大化或最小化,则恢复正常窗口化,第一次打开窗口时应该使用此函数
/// \return 执行成功,返回一个大于32的数字,否则返回错误码:(有些看似重复的但是系统不同模块报的错误,注意区别)
/// 0 系统内存或其他资源不足。
/// ERROR_FILE_NOT_FOUND 指定文件不存在
/// ERROR_PATH_NOT_FOUND 指定路径不存在
/// ERROR_BAD_FORMAT 指定的exe不是一个有效的win32程序或者在32机上是一个64位程序,或exe中存在bug导致异常退出
/// SE_ERR_ACCESSDENIED 访问指定文件权限不足
/// SE_ERR_ASSOCINCOMPLETE 关联的文件名不完整或无效
/// SE_ERR_DDEBUSY DDE事务繁忙
/// SE_ERR_DDEFAIL DDE事物失败
/// SE_ERR_DDETIMEOUT DDE请求超时
/// SE_ERR_DLLNOTFOUND 指定的dll不存在
/// SE_ERR_FNF 指定的文件不存在
/// SE_ERR_NOASSOC 指定文件类型无关联的默认打开程序
/// SE_ERR_OOM 内存不足
/// SE_ERR_PNF 指定的路径不存在
/// SE_ERR_SHARE 已经有一个程序打开了指定文件
参考MSDN:https://docs.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-shellexecutea