使用 ShellExecute 打开文件或执行程序
程序员文章站
2022-05-08 12:48:09
...
使用 ShellExecute 打开文件或执行程序
可以使用 ShellExecute 打开文件或执行程序。
原型:
HINSTANCE ShellExecute(
_In_opt_ HWND hwnd,//父窗口句柄或出错时显示错误父窗口的句柄,可以为 NULL
_In_opt_ LPCTSTR lpOperation,//操作
_In_ LPCTSTR lpFile,//要打开的文件名、执行的程序名、浏览的文件夹等。
_In_opt_ LPCTSTR lpParameters,//可执行程序的参数,否则为 NULL
_In_opt_ LPCTSTR lpDirectory,//默认目录
_In_ INT nShowCmd//显示类型
);
lpOperation 是一个字符串,通常为:
- edit 用编辑器打开 lpFile 指定的文档,如果 lpFile 不是文档,则会失败
- explore 浏览 lpFile 指定的文件夹
- find 搜索 lpDirectory 指定的目录
- open 打开 lpFile 文件,lpFile 可以是文件或文件夹
- print 打印 lpFile,如果 lpFile 不是文档,则函数失败
- properties 显示属性
- runas 请求以管理员权限运行,比如以管理员权限运行某个exe
- NULL 执行默认”open”动作
nShowCmd 执行操作之后程序显示类型,指定该参数后运行起来的程序不一定能按照指定参数显示,只是通知程序的显示状态。类型如下:
- SW_HIDE 隐藏窗口,活动状态给令一个窗口
- SW_MINIMIZE 最小化窗口,活动状态给令一个窗口
- SW_RESTORE 用原来的大小和位置显示一个窗口,同时令其进入活动状态
- SW_SHOW 用当前的大小和位置显示一个窗口,同时令其进入活动状态
- SW_SHOWMAXIMIZED 最大化窗口,并将其**
- SW_SHOWMINIMIZED 最小化窗口,并将其**
- SW_SHOWMINNOACTIVE 最小化一个窗口,同时不改变活动窗口
- SW_SHOWNA 用当前的大小和位置显示一个窗口,不改变活动窗口
- SW_SHOWNOACTIVATE 用最近的大小和位置显示一个窗口,同时不改变活动窗口
- SW_SHOWNORMAL 与SW_RESTORE相同
返回值:
返回值为被执行程序的实例句柄。若返回值小于32,则表示出现错误。错误如下:
- 0 系统内存或资源不足
- ERROR_FILE_NOT_FOUND 找不到指定的文件
- ERROR_PATH_NOT_FOUND 找不到指定路径
- ERROR_BAD_FORMAT .exe文件无效
- SE_ERR_ACCESSDENIED 拒绝访问指定文件
- SE_ERR_ASSOCINCOMPLETE 文件名关联无效或不完整
- SE_ERR_DDEBUSY DDE事务正在处理,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 发生共享冲突
使用:
int ret = (int)ShellExecute(NULL, _T("open"), _T("Dbgview.exe"), NULL, NULL, SW_NORMAL);//打开exe
if (ret < 32)//检测是否指定成功
MessageBox(_T("ERROR"));
ret = (int)ShellExecute(NULL, _T("open"), _T("help.pdf"), NULL, NULL, SW_NORMAL);//打开指定文件,将调用默认处理的程序打开
if (ret < 32)
MessageBox(_T("ERROR"));
ret = (int)ShellExecute(NULL, _T("open"), _T("https://www.baidu.com"), NULL, NULL, SW_NORMAL);//打开网址
if (ret < 32)
MessageBox(_T("ERROR"));
ret = (int)ShellExecute(NULL, _T("open"), _T("c:\\windows"), NULL, NULL, SW_NORMAL);//打开文件夹
if (ret < 32)
MessageBox(_T("ERROR"));
ret = (int)ShellExecute(NULL, _T("runas"), _T("cmd.exe"), NULL, NULL, SW_NORMAL);//请求管理员权限打开cmd
if (ret < 32)
MessageBox(_T("ERROR"));
推荐阅读
-
如何更快速打开U盘里的程序(使用bat文件实现)
-
干掉windows无脑设定:“始终使用选择的程序打开这种文件”、“使用Web服务查找正确的程序”
-
C#使用cmd执行.exe文件,并在程序关闭时关闭打开的进程
-
【记录】不安装anaconda使用jupyter或打开.ipynb文件
-
使用exe4j 将 java 程序打包成 exe 可执行文件
-
windows虚拟桌面_如何在Windows 10的新虚拟桌面中打开应用程序或文件
-
electron教程(四): 使用electron-builder或electron-packager将项目打包为可执行桌面程序(.exe)
-
如何更快速打开U盘里的程序(使用bat文件实现)
-
php-有些音乐网站的mp3文件地址可以通过浏览器打开,但无法使用程序或curl下载
-
c++使用 ShellExecute 打开文件或执行程序