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