【问题标题】:How do the WinAPI Shell APIs differ from the base API and CRT functions?WinAPI Shell API 与基本 API 和 CRT 函数有何不同?
【发布时间】:2013-10-01 11:54:41
【问题描述】:

我正在阅读 Windows 进程 API,并提出三个问题:

  1. 基础 API 和 shell API 有什么区别?我读到外壳 API 包装了基本 API,例如ShellExecute() 和 ShellExecuteEx() 包装了 CreateProcess() 但无法理解区别。

  2. 基本 API 和 Shell API 与 CRT 函数(C 运行时)有何不同。同样,exec() 和 spawn() CRT 函数包装了基本 API 的 CreateProcess()。

  3. 我知道我可以通过编译和链接正确的头文件直接从代码中使用基本 API 和 CRT 函数。如何使用 Shell API?

【问题讨论】:

    标签: windows api winapi process


    【解决方案1】:

    1) 基础 API 和 shell API 有什么区别?

    他们做不同的事情。 ShellExecute 系列以与 shell 相同的方式执行操作,即与 Windows 资源管理器相同。它不仅仅是一个围绕 CreateProcess 的包装器。例如,如果您将 word 文档的路径传递给 ShellExecute,ShellExecute 将在注册表中查找打开 word 文档的正确方法,然后执行此操作。

    ShellExecute 还可以执行您在 Windows 上下文菜单中看到的其他“动词”,例如编辑、打印等。

    2) 基本 API 和 Shell API 与 CRT 函数有何不同

    CRT 函数在 Windows 上实现,以便与 C 标准兼容。它们是 CreateProcess 的包装器,但它们存在的原因是为了兼容而不是提供额外的功能。

    3) 如何使用 Shell API 的

    要使用 shell API,您只需包含头文件并链接正确的库,就像使用任何其他 API 一样。

    例如,ShellExecute:

    正如您在页面底部看到的,它会告诉您要包​​含哪个文件以及要链接到哪个库。

    要求

    支持的最低客户端:Windows XP [仅限桌面应用]

    支持的最低服务器:Windows 2000 Server [仅限桌面应用]

    头文件:Shellapi.h

    库:Shell32.lib

    DLL:Shell32.dll(3.51 或更高版本)

    Unicode 和 ANSI 名称:ShellExecuteW (Unicode) 和 ShellExecuteA (ANSI)

    【讨论】:

      【解决方案2】:

      shell(又名 Windows 资源管理器)增加了一层额外的功能。它管理文件关联,当您要求它“运行”一个文档时,它知道应该启动什么 EXE。如果您传递一个 .html 文件的名称,那么 ShellExecuteEx() 可以确定需要启动浏览器。它还支持动词,您可以对文档执行不同的操作。除了“open”,默认动词,例如“print”和“edit”动词很常见。

      CreateProcess() 中缺少这个,它只知道如何启动一个可执行文件。仍然有很多选项,请查看 MSDN 文档以了解安全属性和创建标志选项。

      CRT 函数中缺少很多这些口哨,它们适用于任何操作系统,因此除了指定可执行文件名称和命令行参数之外,您无能为力。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-24
        • 2010-09-30
        • 2012-05-02
        • 2014-08-06
        • 2016-09-07
        相关资源
        最近更新 更多