3

有人可以解释结构中的pid字段是什么吗?PROPERTYKEY微软说不要使用0or1你很好,但是当我需要IPropertyStore在我的代码中实现时这并没有帮助。是否pid应该是键的一部分,所以可能存在多个相同fmtid但不同的值?pid还是应该忽略它,所以GetValue应该返回任何匹配的值fmtid,忽略pid

4

1 回答 1

5

这种 fmtid+pid 组合在历史上与 OLE 相关(是的,这已经很老了)。

那时的fmtid(格式id)就像一个类别,pid(属性id)是类别中的属性标识符。例如,您在这里定义了第一个 FMTID:Predefined Property Set Format Identifiers。这些属性仍然用于 Office 文档(作者、关键字等)所以每个类别都有很多属性(对于很多属性来说 fmtid 很少),但是 fmtid 和 pid 的组合总是使属性在空间和星系。

此后出现了其他 FMTID,您可以在 Windows SDK 的 propkey.h 中查看:FMTID_AudioSummaryInformation、FMTID_Volume、FMTID_ShellDetails 等...

今天,对于一些新的属性,FMTID 不再意味着任何东西。例如,System.Contact.Birthday的 fmtid 为 1 76DC63C-2688-4E89-8143-A347800F25E9,id 为47,但 fmtid 没有特殊含义,也没有具体定义,因此实际上可以单独用于 key。

因此,对于给定的属性,您必须考虑键仍然是两者的组合(因此结构名称:PROPERTYKEY),但您可以使用 pid 将自己的属性定义为大于或等于 2 的值(如官方文档指定)如果您愿意,可以将 fmtid 作为新的 guid。我个人还是更喜欢为一组属性定义一个通用的 FMTID。

于 2013-03-13T15:00:26.677 回答