一个Shell扩展就是一个为Explorer添加功能的COM对象。 Shell扩展是个进程内服务器(运行在Explorer进程内),它实现了一些接口来处理与 Explorer 的通信。 ATL在我看来是设计Shell扩展最简单最快捷的方法, 如果没有它,你就不得不一遍又一遍地编写繁琐的 QueryInterface() 及AddRef()代码. 另外,在Windows NT 和 2000上调试Shell扩展相对比较容易一些,这我以后会讲到的。 Shell扩展有很多种类型,每种类型都在各自不同的事件发生时被调用运行,但也有一些扩展的类型和调用情形是非常相似的。 类型 何时被调用 应该作些什么 Context menu 扩展处理器 用户右键单击文件或文件夹对象时, 或在一个文件夹窗口中的背景处单击右键时(要求shell版本为4.71+) 添加菜单项到上下文菜单中 Property sheet 扩展处理器 要显示一个文件对象的属性框时 添加定制属性页到属性表中 Drag and drop 扩展处理器 用户用右键拖放文件对象到文件夹窗口或桌面时 添加菜单项到上下文菜单中 Drop 扩展处理器 用户拖动Shell对象并将它放到一个文件对象上时 任何想要的操作 QueryInfo扩展处理器 (需要shell版本 4.71+) 用户将鼠标盘旋于文件或其他Shell对象的图标上时 返回一个浏览器用于显示在提示框中的字符串 现在你可能想知道Shell扩展到底是什么样的. 如果你安装了 WinZip (有谁没装的吗?), 它就包含了多种的Shell扩展,其中也就有上下文菜单扩展.