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 中。























本文转自桂素伟51CTO博客,原文链接:http://blog.51cto.com/axzxs/221152 ,如需转载请自行联系原作者




相关文章
|
4月前
|
JavaScript
函数形状有几种定义方式;操作符infer的作用
函数形状有几种定义方式;操作符infer的作用
25 3
|
11月前
|
算法
单变量与多变量线性回归(Linear Regression with One Variable)
它被称作监督学习是因为对于每个数据来说,我们给出了“正确的答案”,即告诉我们:根据我们的数据来说,房子实际的价格是多少,这是一个回归问题。回归指的是,我们根据之前的数据预测出一个准确的输出值,对于这个例子就是价格,同时,还有另一种最常见的监督学习方式,叫做分类问题,当我们想要预测离散的输出值,例如,我们正在寻找癌症肿瘤,并想要确定肿瘤是良性的还是恶性的,这就是0/1离散输出的问题。
115 0
单变量与多变量线性回归(Linear Regression with One Variable)
|
JavaScript 前端开发 网络架构
【ES6】函数的参数、Symbol数据类型、迭代器与生成器
【ES6】函数的参数、Symbol数据类型、迭代器与生成器
80 0
|
存储 传感器 Python
[oeasy]python0132_变量含义_meaning_声明_declaration_赋值_assignment
[oeasy]python0132_变量含义_meaning_声明_declaration_赋值_assignment
70 0
[oeasy]python0132_变量含义_meaning_声明_declaration_赋值_assignment
|
JavaScript 前端开发 测试技术
学习TypeScrip13(symbol类型)
我们平时开发中不会手动调用iterator 应为 他是有语法糖的就是for of 记住 for of 是不能循环对象的应为对象没有 iterator
92 0
|
索引
学习TypeScrip9(元组类型)
元组与集合的不同之处在于,元组中的元素类型可以是不同的,而且数量固定。元组的好处在于可以把多个元素作为一个单元传递。如果一个方法需要返回多个值,可以把这多个值作为元组返回,而不需要创建额外的类来表示。
60 0
学习TypeScrip9(元组类型)
|
设计模式 索引 Python
如何给列表降维?sum()函数的妙用
1、如果原列表的元素除了列表,还有其它类型的元素,怎么把同类的元素归并在一起呢? 2、如果是一个三维或更高维的列表,怎么更好地把它们压缩成一维列表呢? 3、sum() 函数还有什么知识要点呢?
176 0
【1129】recommendation (25分)【set 运算符重载】
【1129】recommendation (25分)【set 运算符重载】 【1129】recommendation (25分)【set 运算符重载】
78 0
|
TensorFlow 算法框架/工具
TF:TF定义两个变量相乘之placeholder先hold类似变量+feed_dict最后外界传入值
TF:TF定义两个变量相乘之placeholder先hold类似变量+feed_dict最后外界传入值
TF:TF定义两个变量相乘之placeholder先hold类似变量+feed_dict最后外界传入值
|
JavaScript Python
当心Python函数可变默认参数(list,set,dict…)的陷阱
绝大多数情况下,Python是一个干净具有一致性的语言。然而,有些少数情况会让初学者感到困惑。其中有些情况是有意识的但会成为潜在的莫名其妙,而有些可以说是语言赘肉。下面我们看看使用可变默认参数(Mutable default arguments)时会出现什么莫名其妙的状况。
1268 0

热门文章

最新文章