博客
关于我
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图像处理:从内存加载jpeg
    查看>>
    python固定后缀(名物化词汇)词频统计:抽取+统计+可视化
    查看>>
    python商品评论数据采集与分析可视化系统 Flask框架 requests爬虫 NLP情感分析 毕业设计 源码
    查看>>
    python商品数据分析可视化系统(带爬虫)京东销售数据分析 计算机毕业设计 源码下载
    查看>>
    python商品库存管理系统 django框架 商品网站 MySQL数据库 源码下载 计算机毕业设计
    查看>>
    Python哪个版本最稳定好用2023.10.19
    查看>>
    Python和黑客技术的渊源
    查看>>
    Python和RF编写接口自动化
    查看>>
    python和js哪个难_【Python】记一次学习,Python 与 js 在实现闭包时的差异
    查看>>
    python和java哪个更值得学——来自知乎高赞回答
    查看>>
    python命名空间更改_Python模块xml.etree.ElementTree自动修改xml命名空间键
    查看>>
    Python命名中尾随下划线有什么好处?
    查看>>
    Python启动脚本
    查看>>
    Python听写汇总结果
    查看>>
    python吊打Excel?屁!那是你不会用!
    查看>>
    Python合并两张图片 | 先叠透明度再合并 (附Demo)
    查看>>
    python各进制的表述与转换
    查看>>
    python各种库安装
    查看>>
    python可视化matplotlib_如何使用Python中最强大的可视化工具Matplotlib?
    查看>>
    python可维护性_使用这7大神器,让你的Python 代码更容易于维护
    查看>>