Windows编程:在程序中打开文件和文件夹

ShellExecute函数用于执行shell命令,可用于打开文件夹或文件,ShellExecute函数的多字节版本ShellExecuteA(宽字符版本为ShellExecuteW)原型如下

HINSTANCE ShellExecuteA(HWND hwnd,LPCSTR lpOperation,LPCSTR lpFile,LPCSTR lpParameters,LPCSTR lpDirectory,INT nShowCmd);

hwnd为父窗口版本,如果不需要父窗口则传入NULL
lpOperation字符串指示操作行为,可取edit/explore/find/open/print,打开文件夹和文件主要用到explore和open
lpFile文件或文件夹路径
lpParameters如果lpFile是可执行文件,这里作为其参数,不然传NULL即可
lpDirectory被执行文件的工作路径,如果是NULL,则默认是当前程序的工作路径,如果被执行文件需要查找含相对路径的文件时可能需要设置这个值
nShowCmd打开的文件窗口显示模式SW_*宏,如SW_HIDE/SW_SHOW,这个参数被传给打开的可执行文件(WinMain的第四个参数),至于要怎么处理由它自己决定
该函数返回HINSTANCE类型,可转为int,大于42时表示操作成功,下面是官方文档列出的错误


需包含头文件#include <shellapi.h>
1、打开文件夹
下面函数用于打开文件夹,打开文件夹第二个参数传入"explore",第三个参数为文件夹路径

void OpenFolder(const char* folderPath)
{
    int ret = (int)::ShellExecuteA(NULL, "explore", folderPath, NULL, NULL, SW_SHOWNORMAL);
    if (ret <= 32)
    {
        //打开出错
    }
}

2、打开文件
打开文件时ShellExecuteA第二个参数传入"open",第三个参数传文件路径(传文件夹路径时也可以打开文件夹),第四个参数可传入执行参数,将该功能定义为函数ExecuteFile

void ExecuteFile(const char* filePath,const char* param=NULL)
{
    int ret = (int)::ShellExecuteA(NULL, "open", filePath, param, NULL, SW_SHOWNORMAL);
    if (ret <= 32)
    {
        //打开出错
    }
}

调用ExecuteFile可用于打开文档、可执行文件、网址,还可以打开默认邮件客户端发送邮件
(1)打开文档
filePath传入文档路径时,会以该文档默认打开方式打开文档,如传入图片路径则使用默认看图软件打开图片

ExecuteFile("F:/test.png");

(2)打开可执行文件
filePath传入可执行文件路径

ExecuteFile("calc.exe");

(3)打开网址
filePath传入网址

ExecuteFile("https://www.baidu.com");

(4)发送邮件
filePath传入"mailto:"就会打开默认邮件客户端

ExecuteFile("mailto:");

"mailto:"后面还可以跟其他可选的参数,比如收件人邮件地址,主题和主体内容

ExecuteFile("mailto:123456@qq.com?subject=你好&body=我在测试发送邮件");

Windows系统有一个文件资源管理器explorer.exe,可用于文件的管理,filePath传入"explorer.exe",在param传入一些参数也可以实现文件或文件夹打开的功能
如参数/select用于打开文件所在的文件夹并选中该文件

ExecuteFile("explorer.exe","/select,F:\\test.png");

这句代码打开F盘文件夹,并选中test.png,而不是直接打开图片,注意select后面的逗号以及文件路径使用\\分隔符
打开文件夹可使用/e参数

ExecuteFile("explorer.exe","/e,C:\\Program Files");

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值