可以在自定义文件中添加标签吗?

时间:2014-11-10 09:19:33

标签: mfc shell-extensions

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

Defining tags

如果我有自己的自定义文件格式,如何将其添加到文件的详细信息页面? 我一直在研究shell扩展,但这似乎不太可能。我的自定义文件格式是一个复合文件,所以基本上是一个zip存档。

如果它是一个shell扩展,我应该使用它来为我自己的自定义文件启用它,那么请问它是哪一个?我一直在寻找" The Complete Idiot编写Shell扩展指南"但我在那里找不到任何东西,只是如何添加新的属性页。

我正在使用MFC。

谢谢!

1 个答案:

答案 0 :(得分:1)

对于Vista及更高版本:

1)创建shell扩展实现IPropertyStore,IPropertyStoreCapabilities和IInitializeWithStream。如果您无法使用流工具IInitializeWithFile而不是IInitializeWithStream。 A lot of details

2)IPropertyStore.GetCount必须返回您需要的属性数。如果你描述它必须返回1。

3)IPropertyStore.GetAt必须返回属性的PKEY。如果你描述它必须返回PKEY_Keywords。

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_LOCAL_MACHINE \ SOFTWARE \ Classes \ SystemFileAssociations.myzip替换为HKEY_CLASSES_ROOT.myzip。不要忘记将.myzip更改为您的分机。

9)享受结果:

Custom property

对于XP:

1)创建shell扩展实现IColumnProvider。 Part VIII of The Complete Idiot's Guide to Writing Shell Extensions

2)如果您希望用户编辑您的标签,您必须创建Property Sheet shell extension