WinAPI Shell API与基本API和CRT功能有何不同?

时间:2013-10-01 11:54:41

标签: windows api winapi process

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

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

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

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

2 个答案:

答案 0 :(得分:7)

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

     

Library:Shell32.lib

     

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

     

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

答案 1 :(得分:1)

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

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

CRT函数中缺少许多口哨,它们适用于任何操作系统,因此除了指定可执行文件名和命令行参数之外,您无法做很多事情。