在Win32 操作系统 (包括 Win9X 、Windows NT 、Windows 2000 )不但有方便的图 形用 户 ( GUI )界面,微软还为 windows 用户 界面保留了 强 大的可 扩 充性。 其中 对 于 Windows 界面的操作 环 境( 这 里称 为 外壳 Shell ),微 软 提供了一 种 称 为 外壳 扩 展( Shell Extensions )的功能来 实现 文件系 统 操作的可 编 程性。如果你的机器中安装了 Word 7.0 以上的版本,当你鼠 标 右 键单击 一个 DOC 文件,在 弹 出菜 单 中 选 “属性” 项 ,在属性 页 中不 仅显 示 显 示文件的大小、建立日期等信息,同 时还 增加了 Doc 文档的摘要、 统计 等信息;又例如安装了 winZip 6.0 以上版本后,当 选 中一个或多 个文件或文件 夹 后在 单击 鼠 标 右 键 ,在 弹 出的右 键 菜 单 中就增加了“ Add To Zip ” 等一个 zip 文件 压缩选项 。上面的 这 些功能都是通 过 Windows 外壳 扩 展来 实现 的。
Windows 外壳 扩 展是 这样实现 的。首先要 编 写外壳 扩 展程序,一个外壳 扩 展程序是基于 COM(Component Object Model) 组 件模型的。外壳是通 过 接口 (Interface) 来 访问对 象的。外壳 扩 展被 设计 成 32 位的 进 程中服 务 器程序,并且都是以 动态链 接 库 的形式 为 操作系 统 提供服 务 的。
写好外壳 扩 展程序后,必 须 将它 们 注册才能生效。所有的外壳 扩 展都必 须 在 Windows 注册表的 HKEY_CLASSES_ROOT/CLSID 键 之下 进 行注册。在 该键 下面可以找到 许 多名字像 {ACDE002F-0000-0000-C000-000000000046} 的 键 , 这类键 就是全局唯一 类标识 符。 每 一个外壳 扩 展都必 须 有一个全 局唯一 类标识 符, Windows 正是通 过 此唯一 类标识 符来找到外壳 扩 展 处 理程序的。在 类标识 符之下的 InProcServer32 子 键 下 记录 着外壳 扩 展 动态链 接 库 在系 统 中的位置。
Windows 系统 支持以下 7 类 的外壳 扩 展功能:
(1)Context menu handlers 向特定类 型的文件 对 象增添上下文相 关 菜 单 ;
(2)Drag-and-drop handlers 用来支持当用户对 某 种类 型的文件 对 象 进 行拖放操作 时 的 OLE 数据传输 ;
(3)Icon handlers 用来向某个文件 对 象提供一个特有的 图标 ,也可以 给 某一 类 文件 对 象指定 图标 ;
(4)Property sheet handlers 给 文件 对 象增添属性 页 ,属性 页 可以 为 同一 类 文件 对 象所共有,也可以 给 一个文件 对 象指定特有的属性 页 ;
(5)Copy-hook handlers 在文件夹对 象或者打印机 对 象被拷 贝 、移 动 、 删 除和重命名 时 ,就会被系 统调 用,通 过为 Windows 增加Copy-hook handlers ,可以允许 或者禁止其中的某些操作;
(6)Drop target handlers 在一个对 象被拖放到另一个 对 象上 时 ,就会被系 统 被 调 用;
(7)Data object handlers 在文件被拖放、拷贝 或者粘 贴时 ,就会被系 统 被 调 用。