Windows 7 引入 Library(程式庫)概念,取代舊版固定資料夾(我的文件、圖片、音樂等),讓使用者自定義資料夾集合,系統自動建立索引提供快速搜尋與豐富檢視。Shell Library API 讓應用程式能以一級元素身分建立、操作、管理程式庫。

SLUtil Create LibraryName
SLUtil Delete LibraryName
SLUtil Rename OldName NewName
SLUtil AddFolder LibraryName FolderPath
SLUtil RemoveFolder LibraryName FolderPath
SLUtil ShowInfo [LibraryName]
SLUtil FolderType LibraryName [Documents|Pictures|Music|Videos]
SLUtil SaveFolder LibraryName [FolderPath]
SLUtil NavPanePinnedState LibraryName [TRUE|FALSE]
SLUtil Icon LibraryName [Icon]
SLUtil ManageUI Videos
SLUtil ? [CommandName]
Microsoft.WindowsAPICodePack.dll、Microsoft.WindowsAPICodePack.Shell.dll。CommandLineInterpreter.cs(Assets\SLUtil 目錄),解析命令列並調用標記 [Command] 屬性的靜態方法。Main 啟動解析器:
class Program {
static int Main(string[] args) {
CommandLineInterpreter cli = new CommandLineInterpreter(args);
return cli.Execute();
}
}
?,Ctrl+F5 執行驗證輸出幫助資訊。ShellLibrary 提供多個建構子,最簡單為 new ShellLibrary(name, overwrite),實作 IDisposable 需用 using 釋放 COM 物件。
[Command(Name = "Create", Usage = "SLUtil Create LibraryName", Info = "Create a new library", Example = "SLUtil Create MyLib")]
public static void CreateLibrary(string name) {
using (ShellLibrary lib = new ShellLibrary(name, true)) { }
}
建置,命令列參數改為 Create MyLib,執行後在總管「程式庫」節點下可見新建庫。
使用 ShellLibrary.Load(name, false) 以讀寫模式載入既有庫,呼叫 Add(folderPath) / Remove(folderPath)。
[Command(Name = "AddFolder", Usage = "SLUtil AddFolder LibraryName FolderPath", Info = "Add a folder to a library", Example = "SLUtil AddFolder Documents C:\\Docs")]
public static void AddFolder(string name, string folderPath) {
using (ShellLibrary lib = ShellLibrary.Load(name, false)) lib.Add(folderPath);
}
[Command(Name = "RemoveFolder", Usage = "SLUtil RemoveFolder LibraryName FolderPath", Info = "Remove a folder from a library", Example = "SLUtil RemoveFolder Documents C:\\Docs")]
public static void RemoveFolder(string name, string folderPath) {
using (ShellLibrary lib = ShellLibrary.Load(name, false)) lib.Remove(folderPath);
}
驗證:命令列依序執行 Create NewLibrary、AddFolder NewLibrary C:\Users、RemoveFolder NewLibrary C:\Users,觀察總管變化。
刪除本質是刪除 %AppData%\Microsoft\Windows\Libraries\*.library-ms 檔案。重命名透過 ShellLibrary.Copy 建立新名稱副本再刪除舊檔。
[Command(Name = "Delete", Usage = "SLUtil Delete LibraryName", Info = "Delete a library", Example = "SLUtil Delete MyLib")]
public static void DeleteLibrary(string name) {
string libPath = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
ShellLibrary.LibrariesKnownFolder.RelativePath);
string fullPath = Path.ChangeExtension(Path.Combine(libPath, name), "library-ms");
File.Delete(fullPath);
}
[Command(Name = "Rename", Usage = "SLUtil Rename OldName NewName", Info = "Rename a library", Example = "SLUtil Rename MyLib MyLibNewName")]
public static void RenameLibrary(string oldName, string newName) {
using (ShellLibrary lib = ShellLibrary.Load(oldName, true))
ShellLibrary.Copy(lib, newName, ShellLibrary.LibrariesKnownFolder, false);
DeleteLibrary(oldName);
}
驗證:SLUtil.exe Rename MyLib MyLib2。