博客
关于我
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

    指定执行的动作,支持的动作包括:editexplorefindopenprintproperties

  • lpFile

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

  • lpParameters

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

  • lpDirectory

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

  • nShow

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

  • hInstApp

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

  • lpIDList

    指向 ITEMIDLIST 结构的地址,存储操作的特殊标识符。仅在 fMask 包含 SEE_MASK_IDLISTSEE_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/

    你可能感兴趣的文章
    npm ERR! Unexpected end of JSON input while parsing near ‘...“:“^1.2.0“,“vue-html-‘ npm ERR! A comp
    查看>>
    npm error Missing script: “server“npm errornpm error Did you mean this?npm error npm run serve
    查看>>
    npm error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”。要解决此问题,1) 安装
    查看>>
    npm install CERT_HAS_EXPIRED解决方法
    查看>>
    npm install digital envelope routines::unsupported解决方法
    查看>>
    npm install 卡着不动的解决方法
    查看>>
    npm install 报错 EEXIST File exists 的解决方法
    查看>>
    npm install 报错 ERR_SOCKET_TIMEOUT 的解决方法
    查看>>
    npm install 报错 Failed to connect to github.com port 443 的解决方法
    查看>>
    npm install 报错 fatal: unable to connect to github.com 的解决方法
    查看>>
    npm install 报错 no such file or directory 的解决方法
    查看>>
    npm install 权限问题
    查看>>
    npm install报错,证书验证失败unable to get local issuer certificate
    查看>>
    npm install无法生成node_modules的解决方法
    查看>>
    npm install的--save和--save-dev使用说明
    查看>>
    npm node pm2相关问题
    查看>>
    npm run build 失败Compiler server unexpectedly exited with code: null and signal: SIGBUS
    查看>>
    npm run build报Cannot find module错误的解决方法
    查看>>
    npm run build部署到云服务器中的Nginx(图文配置)
    查看>>
    npm run dev 和npm dev、npm run start和npm start、npm run serve和npm serve等的区别
    查看>>