WinAPI Shell API如何与基础API和CRT函数不同?

我正在阅读Windowsstream程API,并留下了三个问题:

  1. 基础API和shell API有什么区别? 我读过shell API包装基础API,例如ShellExecute()和ShellExecuteEx()包装CreateProcess(),但未能理解区别。

  2. Base API和Shell API与CRT函数(C Runtime)有什么不同? 同样,exec()和spawn()CRT函数会封装基本API的CreateProcess()。

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

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

他们做不同的事情。 ShellExecute系列以与shell相同的方式执行操作,即与Windows资源管理器相同。 这不是简单的CreateProcess的包装。 例如,如果传递给ShellExecute到Word文档的路径,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)

外壳(又名Windows资源管理器)增加了一个额外的功能层。 它管理文件关联 ,它知道当你要求“运行”一个文件时应该启动哪个EXE。 如果你传递一个.html文件的名字,那么ShellExecuteEx()可以发现浏览器需要启动。 它也支持动词 ,你可以用文档做不同的事情。 除“打开”之外,默认动词“打印”和“编辑”动词是常见的。

这是从CreateProcess()丢失,它只知道如何启动一个可执行文件。 仍然有很多选项,查看安全属性和创建标志选项的MSDN文档。

很多这些口哨都是从CRT函数中缺少的,它们可以在任何操作系统上工作,所以除了指定可执行文件名称和命令行参数之外,你不能做太多的事情。