在我們使用windows系統時,我們常看到系統有很多型別,比如word的文件型別,它是以doc副檔名標識的,還有pdfhtmlaspx等等,一但我們安裝某些程式,相應型別程式的文件就可以開啟進行編輯了。今天,我們也建立自己的一個型別,並結合JumpListRecent來開發我們的應用。

如何讓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對話方塊來開啟一個檔案。這裡的CommonOpenFileDialogWindows 7 Training Kit For Developers的一個類,必需呼叫這個類,我們才能用jumplist.AddToRecent(dialog.FileName)把最近檔案新增到RecentList中。