3

我正在阅读 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?

4

2 回答 2

7

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)

于 2013-10-01T12:13:04.957 回答
1

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

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

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

于 2013-10-01T12:49:31.830 回答