创建自定义属性

Windows Vista 和更高版本中的属性系统中使用的属性在属性架构中声明。 这些属性架构在 XML 文件中定义,并描述属性的各种方面,包括其类型(包括有关其基元类型的信息以及它是否为多值),如何在 Windows UI 中显示它、将哪种类型的标签(用户友好的编辑字符串)用于它,以及如何将其缓存在搜索存储中以加快访问速度。 属性由其规范名称或其属性键(PKEY)标识。

规范名称是属性的读取器友好名称,并使用类似于 Microsoft .NET 中使用的命名空间约定。 对于系统定义属性(Windows 中包含的属性),约定为 System.GroupName.PropertyName。 请注意,在每个单词开头大写字母的 Pascal 大小写方案在这些名称中使用。 规范名称用于各种位置,包括属性缓存中的属性列表和列名称。 因此,它们用于结构化查询语言 (SQL) 查询来检索属性值。

PKEY 是一对值,由 GUID 和 DWORD 组成,分别称为 formatID 和 propID。 它由 PROPERTYKEY 结构表示。 大多数属性系统 API 都接受这些属性键。 Windows 软件开发工具包(SDK)包括头文件 Propkey.h,其中包含每个属性键的宏定义 System ,并采用约定 PKEY_GroupName_PropertyName。 例如, PKEY_Photo_DateTaken 是具有规范名称 System.Photo.DateTaken的属性的属性键。 属性值以 PROPVARIANT 结构的形式存储,这是 OLE VARIANT 类型的扩展。

本部分包含以下主题,该主题是创建自定义属性不可或缺的一部分:

注意

由于索引器在使用属性系统的架构时可能具有的潜在困难,因此在首次发布架构时,必须仔细和战略性地定义属性。 注册架构后,不会在数据库中反映对属性(类型、列宽、是否可索引)所做的任何更改。 在系统上注册架构后识别这些更改的唯一方法是重新生成索引,然后注册新架构,或注册架构,然后为每个后续版本创建新属性:例如 PKEY_GroupName_PropertyNameV2PKEY_GroupName_PropertyNameV3等等。 不建议以这种方式创建新属性,因为多个多余的列可能会影响系统性能。

 

实现属性处理程序

属性说明架构