1. SHELLEXECUTEINFO

原型:

typedef struct _SHELLEXECUTEINFO {DWORD cbSize;  ULONG fMask;HWND hwnd;LPCTSTR lpVerb;LPCTSTR lpFile;LPCTSTR lpParameters;LPCTSTR lpDirectory;int nShow;HINSTANCE hInstApp;LPVOID lpIDList;LPCTSTR lpClass;HKEY hkeyClass;DWORD dwHotKey;union {HANDLE hIcon;HANDLE hMonitor;} DUMMYUNIONNAME;HANDLE hProcess;
} SHELLEXECUTEINFO, *LPSHELLEXECUTEINFO;

参数:
cbSize

结构大小,以字节为单位。

fMask

一个标志数组,用来设置其他成员的有效性。

hwnd

可选。执行ShellExecuteEx的窗口句柄,可设为NULL。

lpVerb

指定执行的动作,包括:edit ,explore ,find ,open,print, properties

lpFile

以\0 结尾的字符串,指出 lpVerb 的操作对象的路径,被系统支持的操作包括文本的 open 、 print等

lpParameters

可选。运行/打开程序的参数,如果打开的是一个文档,则该项无效

lpDirectory

可选。指明工作目录的名字,成员没有说明,则默认为当前目录

nShow

必须。指定打开的程序的显示方式,为SW_值中的一个。

hInstApp

【out】如果设置SEE_MASK_NOCLOSEPROCESS S值并且ShellExecuteEx 调用成功,则该项的值大于32,如果调用失败,则将设置为SE_ERR_XXX 的错误值。

lpIDList

一个ITEMIDLIST结构的地址,用来存储成员的特别标识符,当fMask不包括SEE_MASK_IDLIST或SEE_MASK_INVOKEIDLIST时该项被忽略

lpClass

用以指明文件类别的名字或GUID,当fMask不包括SEE_MASK_CLASSNAME时该项被忽略

hkeyClass

获得已在系统注册的文件类型的Handle,当fMask不包括SEE_MASK_HOTKEY时该项被忽略

dwHotKey

程序的热键关联,低位存储虚拟关键码(Key Code),高位存储修改标志位(HOTKEYF_),修改标志为(modifier flags)的详细列表请看WM_SETHOTKEY消息的描述,当fmask不包括SEE_MASK_HOTKEY时该项被忽略

DUMMYUNIONNAME

hIcon

取得对应文件类型的图标的Handle,当fMask不包括SEE_MASK_ICON时该项被忽略

hMonitor

将文档显示在显示器上的Handle,当fMask不包括SEE_MASK_HMONITOR时该项被忽略

hProcess

指向新启动的程序的句柄。若fMask不设为SEE_MASK_NOCLOSEPROCESS则该项值为NULL。但若程序没有启动,即使fMask设为SEE_MASK_NOCLOSEPROCESS,该值也仍为NULL。

2. ShellExecuteEx

对指定应用程序执行某个操作

BOOL ShellExecuteEx(LPSHELLEXECUTEINFO lpExecInfo);

参数:

lpExecInfo

[in, out] 一个指向 SHELLEXECUTEINFO 结构的指针,用来传递和保存应用程序执行相关的信息。

返回值:

如果函数成功执行就返回TRUE,否则返回 FALSE 。可调用 GetLastError 获取错误信息。

备注:

由于ShellExecuteEx 能够将执行委托给那些由组件对象模型COM激活的Shell 扩展(数据源,上下文菜单句柄,动词实现),因此在调用ShellExecuteEx 之前要先初始化 COM。某些Shell 扩展要求单线程单元模型的COM,在这种情况下,应当像下面一般初始化COM:

CoInitializeEx (NULL,COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE)

在某些情况下 ShellExecuteEx 并没有使用这种类型的Shell 扩展,这时就无需初始化COM。虽然如此,总是在使用这个函数之前初始化COM是个不错的举措。

3. 使用举例

① 打开一个应用程序


SHELLEXECUTEINFO ShellInfo;memset(&ShellInfo, 0, sizeof(ShellInfo));ShellInfo.cbSize = sizeof(ShellInfo);ShellInfo.hwnd = NULL;ShellInfo.lpVerb = _T("open");ShellInfo.lpFile = szFilePath; // 此处写执行文件的绝对路径ShellInfo.nShow = SW_SHOWNORMAL;ShellInfo.fMask = SEE_MASK_NOCLOSEPROCESS;BOOL bResult = ShellExecuteEx(&ShellInfo);

② 打开一个网页


SHELLEXECUTEINFO ShellInfo;memset(&ShellInfo, 0, sizeof(ShellInfo));ShellInfo.cbSize = sizeof(ShellInfo);ShellInfo.hwnd = NULL;ShellInfo.lpVerb = _T("open");ShellInfo.lpFile = _T("http://www.sina.com");ShellInfo.nShow = SW_SHOWNORMAL;ShellInfo.fMask = SEE_MASK_NOCLOSEPROCESS;BOOL bResult = ShellExecuteEx(&ShellInfo);

③ 如何启动一个程序,直到它运行结束?

SHELLEXECUTEINFO ShellInfo;memset(&ShellInfo, 0, sizeof(ShellInfo));ShellInfo.cbSize = sizeof(ShellInfo);ShellInfo.hwnd = NULL;ShellInfo.lpVerb = _T("open");ShellInfo.lpFile = szFilePath;ShellInfo.nShow = SW_SHOWNORMAL;ShellInfo.fMask = SEE_MASK_NOCLOSEPROCESS;ShellExecuteEx(&ShellInfo);WaitForSingleObject(ShellInfo.hProcess,INFINITE);

使用SHELLEXECUTEINFO 和 ShellExecuteEx相关推荐

  1. SHELLEXECUTEINFO 和 ShellExecuteEx的使用笔记

    一.SHELLEXECUTEINFO结构 在MSDN中,它这样定义: Contains information used by ShellExecuteEx 原型如下: typedef struct ...

  2. C#API大全-C# WIN32 API大全

    C#API大全-C# WIN32 API大全 #region CPUpublic struct CPUInformation{public uint core;public string type;p ...

  3. 加载应用程序(ShellExecute,ShellExecuteEx,SHELLEXECUTEINFO)

    https://docs.microsoft.com/en-us/windows/desktop/shell/launch 一旦你的应用程序定位了一个文件,下一个对其进行的步骤就是对其进行某些操作.例 ...

  4. 使用ShellExecuteEx打开文件或者其他

    转载来源:https://blog.csdn.net/yangyang031213/article/details/64121915 使用 ShellExecuteEx 打开文件或执行程序 可以使用 ...

  5. SHELLEXECUTEINFO控制外部进程

    启动外部应用程序,进行严格控制,判断是否已经启动,对已经启动的副本进行关闭操作等. 代码如下: //判断出图文件是否存在,不存在就提示CString strDirPath="makepart ...

  6. 如何调用一个程序,等待运行结束,并知晓程序运行成功与否:ShellExecuteEx;WaitForSingleObject;GetExitCodeProcess(C代码)

     http://blog.csdn.net/sunmingming512/article/details/23333041 ShellExecute: 1.函数功能: 你可以给它任何文件的名字,它 ...

  7. ShellExecuteEx执行新进程,无需管理员权限写入注册表

    使用ShellExecuteEx函数执行一个新的进程,当然这个进程也可以是自己,无需单独的去获取管理员权限就可以写入注册表,看来这又是木马的一个执行方式. // test.cpp : 定义控制台应用程 ...

  8. ShellExecuteEx使用方法与常用实例

    一.ShellExecuteEx 使用 ShellExecuteEx 打开文件或执行程序 可以使用 ShellExecuteEx 打开文件或执行程序,与 ShellExecute 比较,ShellEx ...

  9. ShellExecuteEx Open Browser

    第一种方式 使用IE打开 但是有个问题 每次都要打开一个新的实例 而不是添加新的选项卡的方式打开 CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED);S ...

  10. ShellExecuteEx API 阻塞和异步调用进程的两种方法

    阻塞: SHELLEXECUTEINFO ShExecInfo = { 0 }; ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); ShExecInfo.fM ...

最新文章

  1. mysql 什么不能用别名_[转]为何group by后面不能使用别名(除MySQL)
  2. 【从零开始学BPM,Day2】默认表单开发
  3. [Medical Image Processing] 1. Introduction
  4. Github | 基于Pytorch可微分计算机视觉库
  5. Spring Data JPA 动态拼接条件的通用设计模式
  6. BZOJ1041:[HAOI2008]圆上的整点(数论)
  7. Atom飞行手册翻译: 2.14 小结
  8. Mac下安装SBT-1.2.8
  9. 访问不上服务器的任何端口
  10. QThread与QObject的关系
  11. java数字的实验怎么做_java实验题目
  12. [py练习] 人口增长的问题
  13. 初学python类必须要知道的三个基础知识(入门理解)
  14. sql空值用什么表示_表面粗糙度Ra为什么用0.8,1.6,3.2,6.3,12.5表示?
  15. JavaMail简易教程
  16. 微软MSDN原版系统下载
  17. 数据结构与算法————无向图
  18. 所发生的发生的发顺丰噶时代发生的发生地方
  19. Win10下Anaconda3上安装tensorflow教程
  20. 新华三+福建工院,给数字人才培养“上一课”!

热门文章

  1. 软件单元测试数据分析模板,单元测试报告模板
  2. 使用GDAL库读取SRTM格式的高程数据
  3. 功能测试Ⅷ——业务流程测试
  4. 常用著名网络教学平台
  5. 注解学习(参考尚硅谷视频)
  6. Android 的座位图控件,用于电影票等选座页面的 APP 中
  7. 【Linux】Linux基础常用命令1(常用Linux命令的基本使用,Linux终端命令格式)
  8. 德标螺纹规格对照表_德标DIN934六角螺母,不锈钢六角螺母DIN934
  9. mysql的填充因子_SQL SERVER中,什么是填充因子?
  10. QR码与DM码的区别