Mfc 是否可以将标签添加到自定义文件?

Mfc 是否可以将标签添加到自定义文件?,mfc,shell-extensions,Mfc,Shell Extensions,对于MS Office文件,如docx文件、图像文件等,您可以在Windows资源管理器的属性中设置可搜索的标记,请参见图像 如果我有自己的自定义文件格式,如何将其添加到文件的详细信息页面? 我一直在研究shell扩展,但这似乎不是解决问题的方法。我的自定义文件格式是复合文件,因此基本上是zip存档 如果它是一个shell扩展,我应该使用它来为我自己的自定义文件启用它,那么请问它是哪一个?我一直在看“编写Shell扩展的完整傻瓜指南”,但我没有找到任何东西,只有如何添加新的属性页 我用的是MF

对于MS Office文件,如docx文件、图像文件等,您可以在Windows资源管理器的属性中设置可搜索的标记,请参见图像

如果我有自己的自定义文件格式,如何将其添加到文件的详细信息页面? 我一直在研究shell扩展,但这似乎不是解决问题的方法。我的自定义文件格式是复合文件,因此基本上是zip存档

如果它是一个shell扩展,我应该使用它来为我自己的自定义文件启用它,那么请问它是哪一个?我一直在看“编写Shell扩展的完整傻瓜指南”,但我没有找到任何东西,只有如何添加新的属性页

我用的是MFC


谢谢

适用于Vista及更高版本:

1) 创建外壳扩展实现IPropertyStore、IPropertyStore功能和IIInitializeWithStream。如果无法使用流,请实现IIInitializeWithFile而不是IIInitializeWithStream

2) IPropertyStore.GetCount必须返回所需的属性数。在您描述的情况下,它必须返回1

3) IPropertyStore.GetAt必须返回属性的PKEY。在您描述的情况下,它必须返回PKEY_关键字

4) 在IPropertyStore.GetValue中,必须从zip文件中读取标记,并在函数结果中返回它们

5) 在IPropertyStore.SetValue内部,必须将新值存储在内部内存存储器中

6) 在IPropertyStore.Commin中,必须将新值从内部内存存储存储到真实的zip文件中

7) 如果希望用户编辑属性,则IPropertyStoreCapabilities.IsPropertyWritable必须返回S_OK

8) 创建注册表值:

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\.myzip]
"FullDetails"="prop:System.PropGroup.Description;System.Keywords;System.PropGroup.FileSystem;System.ItemNameDisplay;System.ItemTypeText;System.ItemFolderPathDisplay;System.Size;System.DateCreated;System.DateModified;System.FileAttributes;*System.OfflineAvailability;*System.OfflineStatus;*System.SharedWith;*System.FileOwner;*System.ComputerName"
您可以尝试将HKEY\U LOCAL\U MACHINE\SOFTWARE\Classes\SystemFileAssociations.myzip替换为HKEY\U Classes\U ROOT.myzip。别忘了把.myzip改成你的分机

9) 享受结果:

对于XP:

1) 创建外壳扩展实现IColumnProvider


2) 如果你想让用户编辑你的标签,你必须创建。

谢谢你的回答!