原文: 【C#】WindowsAPICodePack-Shell使用教程
1.首先在項目中添加WindowsAPICodePack的Nuget包。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcugjNmFWM3EmM2EjY2QTNwMjN5EDZ5kDO1cjMiBTM2ITOfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
點選安裝即可。
2.擷取《我的電腦》的名字和電腦圖示
ShellObject so = ShellFileSystemFolder.FromParsingName(KnownFolders.Computer.ParsingName);
displayName = so.Name;
Bitmap bm = so.Thumbnail.SmallBitmap;
bm.MakeTransparent(System.Drawing.Color.Black);
其中,so.Name就是“我的電腦”的名字,注意不是機器名哦,機器名可以直接通過Environment.MachineName擷取。
電腦圖示可以通過so的Thumbnail擷取,可以獲得SmallBitmap,Bitmap,LargeBitmap,SmallIco,Ico,LargeIco等。不過由于擷取到的Bitmap的背景色由之前的透明色變成了黑色,可以是因為api的原因,是以需要我們用MakeTransparent手動轉為透明色。
擷取到的電腦圖示如下:
其中,KownFolders這個類功能很豐富,裡面包含系統的一些特殊檔案夾,如“我的檔案”、“我的音樂”、“桌面”、“網絡連接配接”等,可直接通路。比.Net Framework裡的Environment.SpecialFolders更強大。
3.擷取檔案/檔案夾的圖示
擷取檔案夾資訊時,可以調用ShellFolder.FromParsingName(string FolderPath),它傳回一個ShellObject對象,通過此對象的Thumbnail屬性可以得到圖示,方法如第二步。
擷取檔案圖示時,調用ShellFile.FromFilePath(string filePath),傳回一個ShellFile對象,調用對象的Thumbnail屬性可以獲得圖示。
4.擷取檔案/檔案夾的屬性資訊
4.1擷取指定的屬性資訊
ShellPropertyCollection props = new ShellPropertyCollection(path);
typeName = props.Where(prop => prop.CanonicalName == "System.IsFolder").First().FormatForDisplay(PropertyDescriptionFormatOptions.None);
以上,代碼可以獲得一個值用來判斷給定的path是一個檔案夾還是一個檔案。
4.2擷取檔案/檔案夾所有不為null的屬性資訊
ShellPropertyCollection cooll = new ShellPropertyCollection(@"c:");
var properties = cooll.Where(prop => prop.CanonicalName != null).OrderBy(prop=>prop.CanonicalName).ToArray();
Array.ForEach(
properties,
p =>
{
DisplayPropertyValue(p);
});
其中,DisplayPropertyValue()方法為:
private static void DisplayPropertyValue(IShellProperty prop)
{
string value = string.Empty;
value = prop.ValueAsObject == null ? "" : prop.FormatForDisplay(
PropertyDescriptionFormatOptions.None);
Debug.WriteLine(prop.CanonicalName + "-------" + value);
}
如例子所示,C:這個檔案夾的屬性資訊如圖:
(檔案夾的不同,可展示出來的屬性資訊數量也不同)
如果把C:改為一個檔案的路徑,如:C:\1.txt。它的屬性資訊為(沒有完全截出來):
擷取某個盤符的名稱:
var item=ShellFileSystemFolder.FromFolderPath("c:\\");
Console.WriteLine(string.Format("displayname is {0},name is {1}", item.GetDisplayName(DisplayNameType.Default), item.Name));
Console.Read();
輸出:displayname is Local Disk (C:),name is Local Disk (C:)
最後:送給大家項目的github位址:
https://github.com/aybe/Windows-API-Code-Pack-1.1其中source/Samples裡有各種各樣的Demo,大家可以參考。