C#实现自动注册自定义文件类型介绍

转载 2013年12月03日 18:48:49

  在我们自己编写的应用中,经常会用自定义类型的文件的来保存与应用相关的数据,如何改变我们的自定义类型的文件的图标?如何双击自定义类型文件的时候启动相应的应用程序了?本文将告诉你如何通过程序来完成这些功能!
        比如.xcf文件就是XCodeFactory应用程序的项目文件。如果没有向Windows注册表注册该文件类型,那么.xcf文件的图标将是windows的文件默认图标,并且你双击一个a.xcf文件,也不会自动启动XCodeFactory应用程序来加载a.xcf文件。如何使.xcf文件的图标变成我自己喜爱的图标、如何完成像点击.doc文件就自动打开word程序的功能,下面将告诉你解决方案。

         我们可以通过手动修改注册表来完成上述任务,更好的方式是,通过程序来实现。这样,在安装应用程序时,就可以自动的注册自定义文件类型了。我通过FileTypeRegister静态类来完成这些功能。首先,将注册需要用到的信息封装成FileTypeRegInfo,定义如下:

public class FileTypeRegInfo { /**//// <summary> /// 目标类型文件的扩展名 /// </summary> public string ExtendName ; //".xcf" /**//// <summary> /// 目标文件类型说明 /// </summary> public string Description ; //"XCodeFactory项目文件" /**//// <summary> /// 目标类型文件关联的图标 /// </summary> public string IcoPath ; /**//// <summary> /// 打开目标类型文件的应用程序 /// </summary> public string ExePath ; public FileTypeRegInfo() { } public FileTypeRegInfo(string extendName) { this.ExtendName = extendName ; } }

FileTypeRegister类主要是操作注册表中的内容,实现如下:

/// <summary> /// FileTypeRegister 用于注册自定义的文件类型。 /// zhuweisky 2005.08.31 /// </summary> public class FileTypeRegister { RegisterFileType#region RegisterFileType /**//// <summary> /// RegisterFileType 使文件类型与对应的图标及应用程序关联起来。 /// </summary> public static void RegisterFileType(FileTypeRegInfo regInfo) { if(RegistryHelper.FileTypeRegistered(regInfo.ExtendName)) { return ; } string relationName = regInfo.ExtendName.Substring(1 ,regInfo.ExtendName.Length-1).ToUpper() + "_FileType" ; RegistryKey fileTypeKey = Registry.ClassesRoot.CreateSubKey(regInfo.ExtendName) ; fileTypeKey.SetValue("" ,relationName) ; fileTypeKey.Close() ; RegistryKey relationKey = Registry.ClassesRoot.CreateSubKey(relationName) ; relationKey.SetValue("" ,regInfo.Description) ; RegistryKey iconKey = relationKey.CreateSubKey("DefaultIcon") ; iconKey.SetValue("" ,regInfo.IcoPath) ; RegistryKey shellKey = relationKey.CreateSubKey("Shell") ; RegistryKey openKey = shellKey.CreateSubKey("Open") ; RegistryKey commandKey = openKey.CreateSubKey("Command") ; commandKey.SetValue("" ,regInfo.ExePath + " %1") ; relationKey.Close() ; } /**//// <summary> /// GetFileTypeRegInfo 得到指定文件类型关联信息 /// </summary> public static FileTypeRegInfo GetFileTypeRegInfo(string extendName) { if(! RegistryHelper.FileTypeRegistered(extendName)) { return null ; } FileTypeRegInfo regInfo = new FileTypeRegInfo(extendName) ; string relationName = extendName.Substring(1 ,extendName.Length-1).ToUpper() + "_FileType" ; RegistryKey relationKey = Registry.ClassesRoot.OpenSubKey(relationName) ; regInfo.Description = relationKey.GetValue("").ToString() ; RegistryKey iconKey = relationKey.OpenSubKey("DefaultIcon") ; regInfo.IcoPath = iconKey.GetValue("").ToString(); RegistryKey shellKey = relationKey.OpenSubKey("Shell") ; RegistryKey openKey = shellKey.OpenSubKey("Open") ; RegistryKey commandKey = openKey.OpenSubKey("Command") ; string temp = commandKey.GetValue("").ToString() ; regInfo.ExePath = temp.Substring(0 ,temp.Length-3) ; return regInfo ; } /**//// <summary> /// UpdateFileTypeRegInfo 更新指定文件类型关联信息 /// </summary> public static bool UpdateFileTypeRegInfo(FileTypeRegInfo regInfo) { if(! RegistryHelper.FileTypeRegistered(regInfo.ExtendName)) { return false ; } string extendName = regInfo.ExtendName ; string relationName = extendName.Substring(1 ,extendName.Length-1).ToUpper() + "_FileType" ; RegistryKey relationKey = Registry.ClassesRoot.OpenSubKey(relationName ,true) ; relationKey.SetValue("" ,regInfo.Description) ; RegistryKey iconKey = relationKey.OpenSubKey("DefaultIcon" ,true) ; iconKey.SetValue("" ,regInfo.IcoPath); RegistryKey shellKey = relationKey.OpenSubKey("Shell") ; RegistryKey openKey = shellKey.OpenSubKey("Open") ; RegistryKey commandKey = openKey.OpenSubKey("Command" ,true) ; commandKey.SetValue("" ,regInfo.ExePath + " %1") ; relationKey.Close() ; return true ; } /**//// <summary> /// FileTypeRegistered 指定文件类型是否已经注册 /// </summary> public static bool FileTypeRegistered(string extendName) { RegistryKey softwareKey = Registry.ClassesRoot.OpenSubKey(extendName); if(softwareKey != null) { return true ; } return false ; } #endregion }

要注意的是commandKey.SetValue("" ,regInfo.ExePath + " %1") ;其中" %1"表示将被双击的文件的路径传给目标应用程序,这样在双击a.xcf文件时,XCodeFactory才知道要打开哪个文件,所以应用程序的Main方法要被改写为带有参数的形式,就像下面的样子:

[STAThread] static void Main(string[] args) { if((args!= null) && (args.Length > 0)) { string filePath = "" ; for(int i=0 ;i<args.Length ;i++) { filePath += " " + args[i] ; } MainForm.XcfFilePath = filePath.Trim() ; } Application.Run(new MainForm()); }

关于自定义文件类型的注册,本文实现的是最基本的功能,如果需要更多的高级功能,也可以类推实现之。

C# 自动注册自定义文件类型

3.  C#编程实现自定义文件类型关联应用程序 在我们自己编写的应用中,经常会用自定义类型的文件的来保存与应用相关的数据,比如.xcf文件就是XCodeFactory应用程序的项目文件。如果没有向W...
  • nieweiking
  • nieweiking
  • 2013年11月27日 17:01
  • 566

C# 注册自定义文件类型 实现自定义文件类型关联默认应用程序

在我们自己编写的应用中,经常会用自定义类型的文件来保存与应用相关的数据,比如.osf文件就是应用程序的项目文件。如果没有向Windows注册表注册该文件类型,那么.osf文件的图标将是windows的...
  • aoshilang2249
  • aoshilang2249
  • 2015年04月01日 22:35
  • 2161

自动注册自定义文件类型

        在我们自己编写的应用中,经常会用自定义类型的文件的来保存与应用相关的数据,比如.xcf文件就是XCodeFactory应用程序的项目文件。如果没有向Windows注册表注册该文件类型,...
  • zhuweisky
  • zhuweisky
  • 2005年09月01日 09:49
  • 2175

使用C#自动注册自定义文件类型

                在我们自己编写的应用中,经常会用自定义类型的文件的来保存与应用相关的数据,如何改变我们的自定义类型的文件的图标?如何双击自定义类型文件的时候启动相应的应用程序了?本文将...
  • kiss0kill
  • kiss0kill
  • 2006年10月27日 10:05
  • 869

自定义文件格式注册和图标设置

我们很多时候可能会有这样的一种需求,即要生成自己的文件格式,然后将这种文件格式注册到操作系统中,双击就会使用特定的程序来打开,并且我们还想为这种文件格式设置一个图标和缩略。本文章解决的是注册文件格式和...
  • Feisy
  • Feisy
  • 2008年07月24日 16:40
  • 4065

【C#】通过webbrowser控件自动注册QQ号讲解

前言:通过webbrowser控件来自动填写网页内容快速申请QQ号,其实对于没有使用类似JS脚本语言的简单网页元素来说比较简单,但是TX并不是吃素的,因此对于其网页自动填写内容需要注意些细节。下面介绍...
  • u011214284
  • u011214284
  • 2015年04月01日 10:43
  • 954

自定义UTI 注册你的APP所支持的文件类型

之前有整理过关于《根据文件后缀打开APP》的文章 ,请先参考它,然后接下来学习,如何自定UTI。 应用场景:APP 打开本公司自定义格式的文件,特殊的自定义后缀的文件。通过QQ 微信、邮箱等等接受到...
  • HeroGuo_JP
  • HeroGuo_JP
  • 2016年06月29日 17:09
  • 2780

directshow 注册自定义文件类型

注册自定义文件类型 作者:lenux2005-12-16 14:57分类:默认分类标签:   ...
  • ljh081231
  • ljh081231
  • 2013年05月08日 10:34
  • 667

C# 邮箱批量注册 设计思路(以163邮箱为例)

转载至http://www.xumingsheng.com/rjbc/csharp/132.html 2、实现的重点就是取验证码和提交数据,其他都很简单 3、网易在取验证码做了js的加密,...
  • wwm402654282
  • wwm402654282
  • 2013年03月19日 16:42
  • 5787

C#自动注册dll方法

C#编译的Dll动态链接库自动注册方法
  • xiaoyao970862315
  • xiaoyao970862315
  • 2015年01月14日 15:35
  • 1354
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#实现自动注册自定义文件类型介绍
举报原因:
原因补充:

(最多只允许输入30个字)