zoukankan      html  css  js  c++  java
  • 如何创建自定义的文件类型关联

     

    什么叫文件类型关联

    所谓文件类型关联,就是在Windows操作系统中,我们为某种文件类型(通过文件扩展名来识别)定义有关的操作关联应用程序。例如,默认情况下,我们双击一个.xls文件,就会自动地打开计算机中安装的Excel这个软件;双击.doc文件,就会自动打开计算机安装的Word这个软件。以此类推。

    很显然,文件类型关联是很重要的一项基础功能,很多软件在安装的时候,都会自动地注册与这个软件有关的文件类型。例如我们上面提到的.xls这种文件类型,通常就是在安装Excel这个软件的时候,自动地完成注册的。

    由用户手工定义文件类型关联

    文件类型是可以自动关联(本文后续会讨论),但如果没有自动地进行关联,那么Windows在我们尝试打开该文件的时候,就会弹出一个对话框,让用户选择要使用哪一个应用程序来打开。例如下面这样

    image

    备注:这个截图是在Windows 8中的效果,在Windows 7或者更早点版本中,界面可能略有不同。

    用户可以自己选择一个应用程序,然后就可以用该应用程序打开该文件(如果确实可以的话);而如果用户选择了“Use this app for all .xxxx  files”的话,那么以后此类文件都会直接使用该应用程序打开,而无需再选择了。

    那么,这到底是如何实现的呢?一定是在某个地方记录好了这个信息,对吧?确实是如此的,Windows会通过注册表的形式记录好这种文件类型关联信息,同时为了让用户查看方便,用户可以在控制面板中,通过如下的界面看到所有的文件类型关联信息。

    image

    image

    image

    这里既可以看到现有的关联信息,但也可以修改。

    通过安装项目新建文件类型关联

    现在回过来,虽然用户确实可以手工地进行关联设置,但如果我们在部署应用程序的时候,能够自动地完成这种关联,当然是很好的。在Visual Studio 2010或者早期版本中,我们可以通过在安装程序中添加文件类型注册,这种功能来实现。

    你可以通过如下的链接来了解如何操作:

    http://msdn.microsoft.com/zh-cn/library/vstudio/s3a0ddk6(v=vs.100).aspx

    http://msdn.microsoft.com/zh-cn/library/vstudio/93c8y383(v=vs.100).aspx

    image

    image

    通过代码实现文件类型关联

    上面这种通过安装程序的做法,是很方便的,可以全方位地定义文件类型关联,包括图标,以及各种操作(新建,打开,编辑等等)。但是很遗憾的是,在Visual Studio 2012中,这个“安装程序”项目模板已经被移除了。那么,如果我们想实现自定义的文件类型关联,有没有比较简单的做法呢?

    其实是有的,我之前就提到了,不管怎么样,这些关联信息是需要保存在注册表中的。那么,如果我们觉得有必要的话,就可以通过代码的形式来创建这些注册表项。

    在注册表中,有两个区域可以保存这些信息。

    如果你希望某个文件关联,只影响当前用户的话,则可以在下面的注册表位置进行注册:HKEY_CURRENT_USERSoftwareClasses

    如果你希望某个文件关联,影响到当前计算机上面所有用户的话,则可以在下面的注册表位置进行注册:HKEY_LOCAL_MACHINESOFTWAREClasses

    那么,具体应该如何注册呢?

    Windows Registry Editor Version 5.00

    [HKEY_CURRENT_USERSoftwareClasses.test] //首先为希望注册的扩展名,新建一个Key

    [HKEY_CURRENT_USERSoftwareClasses.testshell] //然后再新建一个shell的Key

    [HKEY_CURRENT_USERSoftwareClasses.testshellopen]  //然后再新建一个open的Key(open对应了打开操作)

    [HKEY_CURRENT_USERSoftwareClasses.testshellopencommand] //然后再新建一个command的Key
    @="D:\temp\TestApplication\TestApplication\bin\Debug\TestApplication.exe %1"   //为command这个Key默认设置为你的自定义应用程序,其中的%1是一个占位符,表示当前的文件路径。

    看起来是下面这样的

    image
    既然我们搞清楚这个后台的数据结构,那么通过如下的代码可以很容易地完成上述注册。(事实上,你看到只需要1行代码)

    using Microsoft.Win32;
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
    
    
                Registry.SetValue(@"HKEY_CURRENT_USERSoftwareClasses.testshellopencommand", "", "D:\temp\TestApplication\TestApplication\bin\Debug\TestApplication.exe %1");
    
            }
        }
    }
    

    那么,在目标的应用程序中,如何接收该文件信息呢?其实很简单,%1就是那个文件的完整路径,我们可以在Main方法的参数列表中得到这个信息,然后根据这个信息实现自定义的程序逻辑即可。

  • 相关阅读:
    nyoj--76--超级台阶
    nyoj--17--单调递增最长子序列
    poj-2406-Power Strings(KMP)
    poj-1611-The Suspects(并查集)
    poj 2031--Building a Space Station(prim)
    poj 3259-- Wormholes(SPFA)
    nyoj 21--三个水杯(隐式图bfs)
    HDU
    HDU
    CodeForces
  • 原文地址:https://www.cnblogs.com/zhangzhifeng/p/5368763.html
Copyright © 2011-2022 走看看