簡體   English   中英

在 Windows 資源管理器中顯示自定義標題或列

[英]Display custom header or column in Windows Explorer

我的應用程序向文件添加了一些自定義元數據。 我想像這樣在 Windows 資源管理器中顯示它:

樣機 1

或這個:

樣機2

有沒有辦法在 .NET 中做到這一點?

在 Windows 文件管理器中構建自定義列有兩種方法:使用 Windows 屬性系統和雲存儲提供程序的屬性定義。 您通常會使用第一種方法為您擁有的文件類型創建自定義屬性。 在顯示來自文檔管理系統或任何其他存儲的自定義數據時,您將使用第二種方法。

使用 Windows 屬性系統。

您可以在 Windows Vista 和更高版本中為特定文件類型創建自定義屬性 這些屬性可以是只讀的或讀寫的。 以及它們可以被 Window Search 索引器索引並參與搜索。 有一些限制:

...屬性處理程序不能在托管代碼中實現,而應在 C++ 中實現。

  • 該屬性與特定文件類型相關聯,通常屬於您的應用程序。 您不能為所有文件類型創建屬性。

使用雲存儲提供商屬性定義

在 Windows 10 Creators Update 及更高版本中,您可以為使用Cloud Sync Engine API (存儲提供程序、Cloud Filter API)創建的文件系統添加自定義列。 此 API 用於 OneDrive 等工具。 您需要使用自定義屬性定義注冊 Cloud Storage Provider 同步根,為自定義列提供數據,最后使用 Cloud File/Cloud Filter API 實現 Cloud Storage Provider。 在此處輸入圖片說明

屬性定義與文件類型無關,可以為所有文件添加。 此外,即使 .NET 中只有一些 API 可用,您仍然可以調用 Win32 函數並僅使用托管代碼構建雲提供程序。

注冊雲存儲提供商。 以下是在 C# 中使用自定義列注冊存儲提供程序的示例:

StorageProviderSyncRootInfo storageInfo = new StorageProviderSyncRootInfo();
storageInfo.Path = await StorageFolder.GetFolderFromPathAsync("C:\\Users\\User1\\VFS\\");
...
        
// Adds columns to Windows File Manager. 
// Show/hide columns in the "More..." context menu on the columns header.
var proDefinitions = storageInfo.StorageProviderItemPropertyDefinitions;
proDefinitions.Add(new StorageProviderItemPropertyDefinition { DisplayNameResource = "Lock Expires", Id = 2, });
proDefinitions.Add(new StorageProviderItemPropertyDefinition { DisplayNameResource = "Lock Scope", Id = 3, });
        
StorageProviderSyncRootManager.Register(storageInfo);

可以在此處找到完整的注冊示例。

為屬性定義提供數據。 要為列提供數據,您將使用 StorageProviderItemProperties.SetAsync() 調用:

IStorageItem storageItem = await Windows.Storage.StorageFile.GetFileFromPathAsync(path);
StorageProviderItemProperty propState = new StorageProviderItemProperty()
{
     Id = 3,
     Value = "Exclusive",
     IconResource = "C:\\path\\icon.ico" // The optional icon to be displayed in the Status column.
};
await StorageProviderItemProperties.SetAsync(storageItem, new StorageProviderItemProperty[] { propState });

另一種方法是實現IStorageProviderItemPropertySource接口。 它根據您的文件路徑返回屬性。

雲存儲提供商實施。 最后,您將需要一個完整的文件系統實現,為您的文件/文件夾占位符提供數據。 您可以在此處找到 .NET/C# 中的完整示例:

請注意:此答案僅適用於 XP 和 VISTA,已過時

可以使用 Column Handler shell 擴展在 XP 上完成 - 請參見此處: http : //www.codeproject.com/Articles/3747/Explorer-column-handler-shell-extension-in-C#

但是,Vista 及更高版本不支持IColumnHandler 在這里你必須實現PropertyHandler 請參閱 Windows SDK \\Samples\\winui\\Shell\\AppShellIntegration\\PropertyHandlers

每個屬性都由屬性架構 XML 文件描述。 此屬性架構必須使用PSRegisterPropertySchema()注冊。 屬性處理程序實現IInitializeWithXXXIPropertyStore和可選的IPropertyStoreCapabilities 您必須為要處理的每個文件擴展名注冊實現的CLSID

不幸的是,您不能在注冊中使用AllFileSystemObject*

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM