属性表处理程序

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

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

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

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

属性表

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

属性表处理程序通常是为 文件类型注册的。 每个处理程序都可以将一个自定义页添加到类的 Properties 属性表中。 这些页面通常允许用户访问特定于特定文件类型的属性。 例如,由文本文档组成的文件类型可以显示列出标题和作者的页面,以及文档的摘要。 这种类型的属性表处理程序的特殊情况用于将页面添加到已装载驱动器的属性属性表中。

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

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

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

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

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

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

cd-rom 属性表

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

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

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

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