博客
关于我
SHELLEXECUTEINFO 和 ShellExecuteEx的使用
阅读量:426 次
发布时间:2019-03-06

本文共 2939 字,大约阅读时间需要 9 分钟。

SHELLEXECUTEINFO 结构与 ShellExecuteEx 功能详解

SHELLEXECUTEINFO 结构

在 MSDN 中,SHELLEXECUTEINFO 是一个用于 ShellExecuteEx 函数的结构体,包含了执行 Shell 操作所需的各项信息。该结构体的原型定义如下:

typedef struct _SHELLEXECUTEINFO {    DWORD cbSize;    ULONG fMask;    HWND hwnd;    LPCTSTR lpVerb;    LPCTSTR lpFile;    LPCTSTR lpParameters;    LPCTSTR lpDirectory;    int nShow;    HINSTANCE hInstApp;    // 可选成员    LPVOID lpIDList;    LPCSTR lpClass;    HKEY hkeyClass;    DWORD dwHotKey;    HANDLE hIcon;    HANDLE hProcess;} SHELLEXECUTEINFO, FAR *LPSHELLEXECUTEINFO;

参数详解

  • cbSize

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

  • fMask

    标志位数组,用于标记其他成员的有效性。

  • hwnd

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

  • lpVerb

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

  • lpFile

    以 \0 结尾的字符串,指定 lpVerb 操作对象的路径,支持的操作包括文本的打开和打印。

  • lpParameters

    可选参数,用于运行或打开程序的命令行参数。如果是打开文档,则该参数无效。

  • lpDirectory

    可选参数,指定工作目录的名称,默认为当前目录。

  • nShow

    必须参数,指定打开的程序显示方式,取自 SW_ 常数。

  • hInstApp

    【输出】如果设置 SEE_MASK_NOCLOSEPROCESS 并且调用成功,则该参数的值大于 32;如果失败,则设置为 SE_ERR_XXX 错误值。

  • lpIDList

    指向 ITEMIDLIST 结构的地址,存储操作的特殊标识符。仅在 fMask 包含 SEE_MASK_IDLIST 或 SEE_MASK_INVOKEIDLIST 时有效。

  • lpClass

    指明文件类型的名称或 GUID。仅在 fMask 包含 SEE_MASK_CLASSNAME 时有效。

  • hkeyClass

    获取已注册的文件类型的句柄。仅在 fMask 包含 SEE_MASK_HOTKEY 时有效。

  • dwHotKey

    程序的热键关联,低位存储虚拟键码,高位存储修改标志位(HOTKEYF_)。

  • hIcon

    获取对应文件类型的图标句柄。仅在 fMask 包含 SEE_MASK_ICON 时有效。

  • hProcess

    指向新启动程序的句柄。如果 fMask 不设为 SEE_MASK_NOCLOSEPROCESS,则该值为 NULL。即使设置了 SEE_MASK_NOCLOSEPROCESS,如果程序未启动,值仍为 NULL。


  • ShellExecuteEx 函数

    功能说明

    ShellExecuteEx 是 Windows API 中用于执行 Shell 操作的函数。它允许开发者通过指定路径和动作,直接启动应用程序或文档。

    函数原型

    BOOL ShellExecuteEx(LPSHELLEXECUTEINFO lpExecInfo);

    参数说明

  • lpExecInfo
    输入输出参数,指向 SHELLEXECUTEINFO 结构体,用于传递和保存执行相关信息。
  • 返回值

    • TRUE:函数执行成功。
    • FALSE:函数执行失败。

    ###备注

    • COM 初始化

      在调用 ShellExecuteEx 之前,建议先初始化 COM。部分 Shell 扩展要求使用单线程单元模型 COM,因此应使用以下代码进行初始化:

      CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);

      不过,某些情况下 ShellExecuteEx 不需要这种类型的 Shell 扩展,使用前初始化 COM 是一个好的做法。


    示例

    1. 打开一个应用程序

    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);

    2. 打开一个文档

    与上述代码相同,只需确保 lpFile 指向文档的路径即可。

    3. 打开一个网页

    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);

    4. 启动一个程序并等待其运行

    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);

    以上内容结合了 MSDN 文档和实际开发经验,供开发者参考使用。

    转载地址:http://elpuz.baihongyu.com/

    你可能感兴趣的文章
    python利用pytorch库导出图像分割算子
    查看>>
    python利用pyshark监听网卡来抓包其中pyshark中摸索的一些可用参数
    查看>>
    python利用excel分析过杀漏失
    查看>>
    python判断汉字数目
    查看>>
    python判断文件是空的,如果是空的,就删除
    查看>>
    python判断密码是否正确_python密码判断是否符合要求的方法
    查看>>
    python判断字符串包含中文_Python 判断字符串是否包含中文
    查看>>
    python删除第一行_Python 乱码指北:一行删掉根目录
    查看>>
    Python删除列表元素的三种方法
    查看>>
    python初步学习-python数据类型-集合(set)
    查看>>
    python列表生成字典_Python中将字典转换为列表的方法
    查看>>
    python列表对应元素合并为列表及判断一个列表是几维
    查看>>
    python列表去重复后按照顺序_从包含不可共元素的Python列表中删除重复元素,同时保留顺序?...
    查看>>
    python列表前几个_python之列表
    查看>>
    python列表元组
    查看>>
    Python列表/元组/字典和集合使用
    查看>>
    python列表 行列选择_python_pandas_dataframe_行列选择_切片操作
    查看>>
    python列表
    查看>>
    python列出当前目录、子目录和文件的脚本
    查看>>
    python+flask计算机毕业设计骨科门诊患者档案管理系统(程序+开题+论文)
    查看>>