在咱們使用
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
中。