PROPERTYKEY :: pid含义

时间:2013-03-13 14:31:07

标签: winapi windows-7 ipropertystorage

有人可以解释一下PROPERTYKEY结构中的pid字段是什么吗?微软表示只是不要使用01而你没问题,但是当我需要在我的代码中实现IPropertyStore时,这无济于事。 pid是否应该是密钥的一部分,因此可能存在具有相同fmtid但不同pid的多个值?或者应该忽略它,因此GetValue应该返回任何匹配fmtid的值,忽略pid

1 个答案:

答案 0 :(得分:3)

这个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没有特殊含义,并且没有特别定义,因此实际上可以使用仅用于钥匙。

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