首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

Windows 7 開發:Shell Library 管理實戰(下)

     編輯:關於.NET

任務 5:新增 SaveFolder、NavPanePinnedState、Icon、FolderType 命令

這四個命令共用讀/寫模式:若提供參數則設定,否則查詢。ShellLibrary 類直接暴露對應屬性:

  • DefaultSaveFolder(string)
  • IsPinnedToNavigationPane(bool)
  • IconResourceId(IconReference)
  • LibraryType(LibraryFolderType:Generic/Documents/Pictures/Music/Videos)

C# 實現片段

[Command(Name = "SaveFolder", Usage = "SLUtil SaveFolder LibraryName [FolderPath]", Info = "Set or get the library's save folder path", Example = "SLUtil SaveFolder Documents C:\\Docs")]
public static void SaveFolder(string name, string folderPath) {
    bool isRead = string.IsNullOrEmpty(folderPath);
    using (ShellLibrary lib = ShellLibrary.Load(name, isRead)) {
        if (isRead) Console.WriteLine("Save folder: {0}", lib.DefaultSaveFolder);
        else lib.DefaultSaveFolder = folderPath;
    }
}

[Command(Name = "NavPanePinnedState", Usage = "SLUtil NavPanePinnedState LibraryName [TRUE|FALSE]", Info = "Set or get pinned state", Example = "SLUtil NavPanePinnedState MyLib TRUE")]
public static void NavPanePinnedState(string name, string stateText) {
    bool isRead = string.IsNullOrEmpty(stateText);
    using (ShellLibrary lib = ShellLibrary.Load(name, isRead)) {
        if (isRead) Console.WriteLine("The library {0} is{1}pinned to the navigation pane.", name, lib.IsPinnedToNavigationPane ? " " : " not ");
        else lib.IsPinnedToNavigationPane = bool.Parse(stateText);
    }
}

[Command(Name = "Icon", Usage = "SLUtil Icon LibraryName [Icon]", Info = "Set or get icon", Example = "SLUtil Icon MyLib imageres.dll,-1005")]
public static void Icon(string name, string icon) {
    bool isRead = string.IsNullOrEmpty(icon);
    using (ShellLibrary lib = ShellLibrary.Load(name, isRead)) {
        if (isRead) Console.WriteLine("Icon: {0}", lib.IconResourceId.ReferencePath);
        else lib.IconResourceId = new IconReference(icon);
    }
}

[Command(Name = "FolderType", Usage = "SLUtil FolderType LibraryName [Generic|Documents|Pictures|Music|Videos]", Info = "Set or get folder template", Example = "SLUtil FolderType MyLib Documents")]
public static void FolderType(string name, string folderType) {
    bool isRead = string.IsNullOrEmpty(folderType);
    using (ShellLibrary lib = ShellLibrary.Load(name, isRead)) {
        if (isRead) Console.WriteLine("Folder type: {0}", lib.LibraryType);
        else lib.LibraryType = (LibraryFolderType)Enum.Parse(typeof(LibraryFolderType), folderType);
    }
}

任務 6:新增 ShowInfo 命令

顯示單一庫或所有庫的完整資訊(名稱、釘選狀態、儲存資料夾、圖示、類型、資料夾清單)。ShellLibrary 實作 IList<FileSystemFolder>,可直接迭代。

[Command(Name = "ShowInfo", Usage = "SLUtil ShowInfo [LibraryName]", Info = "Show library info", Example = "SLUtil ShowInfo Documents")]
public static void ShowInfo(string name) {
    if (string.IsNullOrEmpty(name)) {
        foreach (ShellObject obj in ShellLibrary.LibrariesKnownFolder) {
            var lib = obj as ShellLibrary;
            if (lib == null) continue;
            try { ShowInformation(lib); } catch (Exception ex) { Trace.WriteLine("Error: " + ex.Message); }
            lib.Dispose();
        }
    } else {
        using (ShellLibrary lib = ShellLibrary.Load(name, true)) ShowInformation(lib);
    }
}

private static void ShowInformation(ShellLibrary lib) {
    string saveFolder = "";
    try { saveFolder = lib.DefaultSaveFolder; } catch { }
    Console.WriteLine("\nShowing information of {0} library", lib.Name);
    Console.WriteLine("\tIs pinned to navigation pane: {0}", lib.IsPinnedToNavigationPane);
    Console.WriteLine("\tSave folder: {0}", saveFolder);
    try { Console.WriteLine("\tIcon: {0}", lib.IconResourceId.ReferencePath); } catch { }
    try { Console.WriteLine("\tFolder type: {0}", lib.LibraryType); } catch { }
    Console.WriteLine("\tFolder list:");
    foreach (ShellFolder f in lib) Console.WriteLine("\t\t{0} {1}", f.Name, saveFolder == f.Name ? "*" : "");
}

任務 7:新增 ManageUI 命令

呼叫 ShellLibrary.ShowManageLibraryUI 顯示系統原生庫管理對話框,支援 WinForms、WPF、原生 HWND 三種父視窗型別。

[Command(Name = "ManageUI", Usage = "SLUtil ManageUI LibraryName", Info = "Show Shell Library management UI", Example = "SLUtil ManageUI Documents")]
public static void ManageUI(string name) {
    using (ShellLibrary lib = ShellLibrary.Load(name, false)) {
        lib.ShowManageLibraryUI(IntPtr.Zero, "SLUtil", "Manage Library", true);
    }
}

Shell Library Management Dialog

總結

本實驗完整示範如何使用 Microsoft.WindowsAPICodePack.Shell 以程式碼管理 Windows 7 Shell Library:建立、刪除、重命名、增刪資料夾、屬性設定、資訊查詢、原生管理 UI。更多範例請參考 Windows API Code Pack 範例庫 中的 LibraryManagerDemo。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved