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

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

     編輯:關於.NET

概覽

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

Libraries integrated with Windows Shell

實驗目標

  • 建立、開啟、刪除、重命名程式庫
  • 增刪程式庫資料夾、取得資料夾清單
  • 設定預設儲存位置、資料夾類型、圖示、導覽窗格釘選
  • 顯示系統管理 UI 對話框

環境需求

  • Visual Studio 2008
  • Windows 7
  • Windows API Code Pack(實驗 Assets 目錄已內含)

練習 1:開發 SLUtil 命令列工具

支援命令

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]

任務 1:建立專案

  1. Console Application,名稱 SLUtil。
  2. 參考 Microsoft.WindowsAPICodePack.dll、Microsoft.WindowsAPICodePack.Shell.dll。
  3. C# 專案額外參考:PresentationCore、PresentationFramework、WindowsBase、System.Windows.Forms。
  4. 加入 CommandLineInterpreter.cs(Assets\SLUtil 目錄),解析命令列並調用標記 [Command] 屬性的靜態方法。
  5. 修改 Main 啟動解析器:
    class Program {
        static int Main(string[] args) {
            CommandLineInterpreter cli = new CommandLineInterpreter(args);
            return cli.Execute();
        }
    }
    
  6. 建置,專案屬性 → Debug → Command line arguments 設為 ?,Ctrl+F5 執行驗證輸出幫助資訊。

任務 2:Create 命令

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,執行後在總管「程式庫」節點下可見新建庫。

任務 3:AddFolder / RemoveFolder 命令

使用 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,觀察總管變化。

任務 4:Delete / Rename 命令

刪除本質是刪除 %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。

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