在我们使用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 ,如需转载请自行联系原作者

JumpList中Recent类别和自定义类型相关推荐

  1. Scala的自定义类型标记

    Scala的自定义类型标记 Scala中有很多千奇百怪的符号标记,看起来是那么的独特,就像是一杯dry martini-好像黑夜中的萤火虫,那么耀眼,那么出众. 好了言归正传,这一篇文章我们会讲一下S ...

  2. SpringMVC框架----SpringMVC的自定义类型转换器

    上一段我们介绍了请求参数的绑定 SpringMVC请求参数的绑定 在请求参数绑定的时候,有时候会遇到一些问题,如自定义类型转换器异常 1.自定义类型转换器演示异常 现在有一个页面,想给服务器提交数据, ...

  3. 解决中文乱码和自定义类型转换器

    一.解决maven项目创建过慢的问题: archetypeCatalog       internal 二.解决参数中文乱码的解决 在web.xml中配置Spring提供的过滤器类 <!--配置 ...

  4. vue props使用typescript自定义类型

    前言 Base: vue@3.2.33 + typescript@4.1.6 + npm@8.5.0 尝试解决将ts中自定义的interface/type,传vue的props属性的问题. 记录一下过 ...

  5. java通过poi读取excel中的日期类型数据或自定义类型日期

    java通过poi读取excel中的日期类型数据或自定义类型日期 Java 读取Excel表格日期类型数据的时候,读出来的是这样的  12-十月-2019,而Excel中输入的是 2019/10/12 ...

  6. java自定义方法参数注解_Java方法中的参数太多,第1部分:自定义类型

    java自定义方法参数注解 我认为构造函数和方法中冗长的参数列表是Java开发中的另一个" 危险信号 ",就逻辑和功能而言,它们不一定是"错误的",但通常暗示当 ...

  7. Java方法中的参数太多,第1部分:自定义类型

    我认为构造函数和方法中冗长的参数列表是Java开发中的另一个" 危险信号 ",就逻辑和功能而言,它们不一定是"错误的",但通常暗示当前或将来出现错误的可能性很高 ...

  8. C语言中的自定义类型

    C语言中的自定义类型 (一)结构体 结构体的声明 结构体是一些值的集合,这些值称为成员变量,结构体的成员可以是不同类型的变量: 结构体的声明 struct tag { member-list; }va ...

  9. [转载] 向集合中添加自定义类型--建议在自定义类型的时候要重写equals方法

    参考链接: Java重写equals方法 package com.bjpowernode.t01list; import java.util.ArrayList; /* * 向集合中添加自定义类型 * ...

  10. java converter转换器_在SpringMVC中设置自定义类型转换器Converter

    前言 在SpringMVC中为我们提供了许多内置的类型转换器,当我们在HTML表单中发起一个请求时,Spring会根据表单项中name属性的值映射到POJO的属性名,调用相对性属性的set方法帮我们把 ...

最新文章

  1. json字段顺序读取 python_如何利用Python批量读取视频文件的时间长度?
  2. Redis集群添加节点
  3. 数据库中字段随机添加汉字
  4. junetxtdb.class.php,PHP-site
  5. 最强联合!北大清华互相开放本科课程(附课程名单)
  6. mysql的应用_mysql应用场景
  7. Spark核心概念与案例拆解
  8. 【计算机体系结构实验】MIPS指令系统和MIPS体系结构
  9. 合并在即:详解以太坊最新技术路线
  10. 董卫凤:不服输的华丽转身(二)
  11. 2022年下半年软考网络规划设计师下午真题及答案解析
  12. 基于qt与mupdf库的pdf阅读器开发
  13. 计算机相关扩展活动战队名字,2020最新战队名字大全
  14. JS实现动态添加和删除div
  15. 创建目录 mkdir
  16. 桌面上ie图标不见了,怎样恢复
  17. Ps学习(圆形选区和自由变换的运用)
  18. 消费者详解-消费消息(1)
  19. 微信小程序上传图片时校验所选图片是否为身份证图片
  20. 2018年终总结:你的公司是否需要自建一套基于H5活动的SAAS系统

热门文章

  1. jQuery的几个例子流程讲解
  2. 第二十三模板 9对像数组模板
  3. mysql必知必会学习笔记
  4. 使用 ASP.NET 2.0 ObjectDataSource 控件(整理自msdn)
  5. 【linux系统学习笔记】Ubuntu文本界面和图像界面的切换
  6. 【LeetCode】【数组】题号:*189,旋转数组
  7. Python3——列表:Python主力
  8. linux和宿主机windows之间建立共享文件夹
  9. 【ArcGIS|空间分析】地理编码
  10. esayexcel导出动态表头数据