JumpList中Recent類別和自定義類型

在咱們使用 windows 系統時,咱們常看到系統有不少類型,好比 word 的文檔類型,它是以 doc 擴展名標識的,還有 pdf html aspx 等等,一但咱們安裝某些程序,相應類型程序的文檔就能夠打開進行編輯了。今天,咱們也建立本身的一個類型,並結合 JumpList Recent 來開發咱們的應用。
如何讓 windows 系統認識本身的類型,其實就是把咱們的類型註冊到註冊表裏的 HKEY_CLASSES_ROOT 下,具體註冊信息,詳看下面代碼。
代碼以下:
// 註冊應用程序文件和圖標
RegistryKey classesRoot = Registry.ClassesRoot;
  private static void RegisterProgId(string progId, string appId,
            string openWith, string IcoPath)
        {
          
            RegistryKey progIdKey = classesRoot.CreateSubKey(progId);
            progIdKey.SetValue("FriendlyTypeName", "@shell32.dll,-8975");
            progIdKey.SetValue("DefaultIcon", "@shell32.dll,-47");
            progIdKey.SetValue("CurVer", progId);
            progIdKey.SetValue("AppUserModelID", appId);
 
            RegistryKey shell = progIdKey.CreateSubKey("shell");
            shell.SetValue(String.Empty, "Open");
            shell = shell.CreateSubKey("Open");
            shell = shell.CreateSubKey("Command");
            shell.SetValue(String.Empty, openWith);
 
            RegistryKey iconKey = progIdKey.CreateSubKey("DefaultIcon");
            iconKey.SetValue("", IcoPath);
 
            shell.Close();
            progIdKey.Close();
        }
// 註冊類型
      private static void RegisterFileAssociation(string progId, string extension)
        {
            RegistryKey openWithKey = classesRoot.CreateSubKey(
                Path.Combine(extension, "OpenWithProgIds"));
            openWithKey.SetValue(progId, String.Empty);
            openWithKey.Close();
        }
在這個方法中,後兩個參數是比較重要的, openWith 參數應用程序因此在路徑和附加參數, IcoPath 是應用程對應的圖標。經過這一步,咱們就能把本身的類型註冊到系統中,具體的類型依照 extension 參數來提供。
這樣,若是在系統下創建一個 extension 實參爲類型的文件時,咱們看到的將是以對應圖標替換的文件,雙擊,調用的是咱們剛纔註冊的應用程序。
好比,咱們如今註冊的是 diar ,在系統下,全部以 diar 爲擴展名的文件,都成爲可執行文件了。
但怎麼經過雙擊把文件的內容加載到應用程序中呢?
代碼以下,在應用程序的加載時執行:
string[] parameters = Environment.GetCommandLineArgs();
if (parameters.Length > 1)
{
    filePath = parameters[1];
    //filePath 傳過來的就是雙擊的文件的路徑,這樣咱們就能夠經過 IO 來操做這個文件了
}
其實上面這些知識不是 Windows7 JumpList 所特有的,怎麼和 JumpList 中的知識關聯呢?
JumpList 中,有一個 Recent 類別,就是最近打開的文件。其實系統有一個 RecentList ,會保存最近打開的文檔,這個列表只有在兩種狀況下向其中添加子項,第一種就是上面咱們在註冊完類型後,雙擊文檔時會添加到 RecentList 中。另外一種情部下面說明。
看下面代碼:
   private void OpenDiaryFile()
        {
            CommonOpenFileDialog dialog = new CommonOpenFileDialog();
            dialog.Title = "Select a diary document";
            dialog.Filters.Add(new CommonFileDialogFilter("Text files (*.diar)", "*.diar"));
            CommonFileDialogResult result = dialog.ShowDialog();
            if (result == CommonFileDialogResult.OK)
            {
                filePath = dialog.FileName;
                Content_TB.Text = File.ReadAllText(dialog.FileName, Encoding.Default);
                jumplist.AddToRecent(dialog.FileName);
                jumplist.KnownCategoryToDisplay = JumpListKnownCategoryType.Recent;// 最近                 // jumplist.KnownCategoryToDisplay = JumpListKnownCategoryType.Frequent ;// 經常使用            
                jumplist.Refresh();
            }
這段代碼不難理解,就是用一個定義好的 CommonOpenFileDialog 對話框來打開一個文件。這裏的 CommonOpenFileDialog Windows 7 Training Kit For Developers 的一個類,必需調用這個類,咱們才能用 jumplist.AddToRecent(dialog.FileName) 把最近文件添加到 RecentList 中。
相關文章
相關標籤/搜索