属性表处理程序

当用户右键单击 Shell 对象时,显示的快捷菜单通常包括 属性 项。 选择该项会启动一个属性表,该属性允许用户查看对象的属性,在某些情况下修改该对象的属性。 可以通过实现和注册 属性表处理程序来自定义此属性表。

创建 Shell 扩展处理程序中讨论了实现和注册 Shell 扩展处理程序的一般过程。 本文档重点介绍特定于属性表处理程序的实现方面。

属性表处理程序的工作原理

下图显示了 Windows XP 文本文件的属性属性表。

属性表

此图显示了为任何文件显示的默认 Properties 属性表。 对于许多此类属性表,可以通过实现和注册属性表处理程序,将一个或多个页面添加到属性表。

属性表处理程序最常注册 文件类型。 每个处理程序都可以向类的 Properties 属性表添加一个自定义页面。 这些页面通常允许用户访问特定于特定文件类型的属性。 例如,包含文本文档的文件类型可以显示一个列出标题和作者的页面,以及文档的抽象。 此类型的属性表处理程序的特殊情况用于向装载驱动器的 Properties 属性表添加页面。

属性表处理程序的另一个用途是替换控制面板应用程序显示的属性表中的页面。 例如,鼠标制造商可以使用属性表处理程序将控制面板 鼠标属性 属性表中的 按钮 页替换为为其鼠标特征自定义的页面。

与所有 Shell 扩展处理程序一样,属性表处理程序是作为 DLL 实现的进程内组件对象模型 (COM) 对象。 除了 IUnknown外,它们还必须导出两个接口:IShellExtInitIShellPropSheetExt

Shell 使用 IShellExtInit 接口来初始化处理程序。 当 Shell 调用 IShellExtInit::Initialize时,它将传入具有对象名称的数据对象,以及指向包含该文件的文件夹的项目标识符列表(PIDL)的指针。 hRegKey 参数不与属性表处理程序一起使用。 IShellExtInit::Initialize 方法必须从数据对象中提取文件名,并存储名称和文件夹的 PIDL 供以后使用。 有关更多详细信息,请参阅 创建 Shell 扩展处理程序实现 IShellExtInit 部分。

作的其余部分通过处理程序的 IShellPropSheetExt 接口进行。 如果属性表与文件类型相关联,Shell 将调用 IShellPropSheetExt::AddPages,以允许处理程序向属性表添加页面。 如果属性表与控制面板应用程序关联,Shell 将调用 IShellPropSheetExt::ReplacePage 以允许处理程序替换页面。

注册和实现已装载驱动器的属性表处理程序

每个装载的驱动器都有一个可由用户显示的 Properties 工作表。 下图显示了 CD-ROM 驱动器的属性属性表。

cd-rom 属性属性表

有多种设备可以装载为驱动器。 由于为磁盘驱动器设计的默认属性表可能不足以用于某些设备,因此可以实现属性表处理程序来添加特定于已装载设备的页。 这种类型的属性表处理程序的基本实现与 如何为文件类型注册和实现属性表处理程序中讨论的相同,但有两个例外。

  • 传递给处理程序的 IShellExtInit::Initialize 方法的数据对象可能包含 CFSTR_MOUNTEDVOLUME 格式的驱动器路径,而不是 CF_HDROP 格式。 将设备装载到驱动器号时,将使用CF_HDROP格式。 将远程设备装载到文件夹而不是驱动器号时,CFSTR_MOUNTEDVOLUME格式与 NTFS 文件系统一起使用。
  • 处理程序的 GUID 在 HKEY_CLASSES_ROOT\Drive\shellex\PropertySheetHandlers 键下注册。

如何为文件类型 注册和实现属性表处理程序

如何为控制面板应用程序注册和实现属性表处理程序