ShellExecute API详解。通过在资源管理器(explorer)中打开文件夹和在默认浏览器中打开url链接等

12 篇文章 0 订阅

使用样例:

#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.csdn.net/
	ShellExecute(NULL, TEXT("open"), TEXT("https://www.csdn.net/"), 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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值