Vs2005之简单日志工具的制作--4.文件类型注册

  文件类型注册的可重用的类在项目FileTypeReg里,而实际使用的类TSysRegeist在MyLog3(即主程序)项目中。

  所谓文件类型注册,实际上是向注册表的HKEY_CLASSES_ROOT项中写入一些相关的数据:首先,在HKEY_CLASSES_ROOT项下建立一个子项,名称即为后缀名,如".ml3"。它有一个默认值,比如"ML3_FileType"。意思是指,".ml3"文件类型的相关数据存储在HKEY_CLASSES_ROOT下的"ML3_FileType"这个子项里面。

  

  
  "ML3_FileType"子项的内容像下面这样:

  

  

        

  其中,Shell和Open下面的值是空的。因此,重要的属性有下面三个:
  1。文件类型描述,即"ML3_FileType"下的默认值"MyLog3 日志文件"。
  2。图标路径,即"DefaultIcon"下的默认值"F:桌面MyLog3ML3.ico"。
  3。启动参数,即"Command"下的默认值"F:桌面MyLog3MyLog3.exe "%1""。它是意思是,每当运行.ml3类型的文件,就会调用程序"F:桌面MyLog3MyLog3.exe",传递的命令行参数为""fileName"",fileName指的是这个ml3文件的完全路径。注意,路径用""包括了起来,这样,当文件名中有空格时不至于产生错误。(如:文件名为"F:ab  cd.ml3",如果不加"",则收到的命令行参数会是2个:F:ab和cd.ml3。)

  
  首先,需要一个类,用它来记录这些信息,看项目FileTypeReg里的类FileTypeRegInfo:
       

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

  

  其次,需要一个类,它实际上执行注册表的写入操作,看项目FileTypeReg里的类FileTypeRegister:
  

public class FileTypeRegister
    ...{
        //注册文件类型到系统中,需要传递FileTypeRegInfo对象       
        public static void RegisterFileType(FileTypeRegInfo regInfo)
        ...{
            //
        }
        //从系统中删除文件类型,需要传递后缀名,比如 .txt
        public static void DelFileTypeReg(string extendName)
        ...{
            //
        }        
        //返回相关的文件类型系统中的注册信息
        public static FileTypeRegInfo GetFileTypeRegInfo(string extendName)
        ...{
            //
        }        
        //更新文件类型信息
        public static bool UpdateFileTypeRegInfo(FileTypeRegInfo regInfo)
        ...{
            //
        }        
        //检查指定的文件类型是否已经注册过
        public static bool FileTypeRegistered(string extendName)
        ...{
            //
        }
    }

  

  增加注册RegisterFileType(FileTypeRegInfo regInfo):

       

public static void RegisterFileType(FileTypeRegInfo regInfo)
        ...{
            if (FileTypeRegistered(regInfo.ExtendName))
            ...{
                return;
            }

            //xcf_FileType
            string relationName = regInfo.ExtendName.Substring(1, regInfo.ExtendName.Length - 1).ToUpper() + "_FileType";

            //指定.xcf文件的关联信息在xcf_FileType中
            RegistryKey fileTypeKey = Registry.ClassesRoot.CreateSubKey(regInfo.ExtendName);//创建项.xcf
            fileTypeKey.SetValue("", relationName);//在.xcf 中增加一个默认值为 xcf_FileType
            fileTypeKey.Close();

            RegistryKey relationKey = Registry.ClassesRoot.CreateSubKey(relationName);//创建项xcf_FileType
            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();
        }
  

  首先,判断是否已经注册过,如果已注册则退出。再得到存储信息的名relationName,并创建相应的子项DefaultIcon、Shell、Open、Command,写入相应的数据。这里涉及到注册表的操作,对其中的函数不明白的可以查看vs2005中的对象浏览器。
  后面还有更新、删除等操作,其原理是一样的,对注册表中的值进行修改。

  在MyLog3项目中,实际执行文件类型注册的类是TSysRegeist:
  

public static void AddRegeist()//注册文件类型 .ml3
        ...{
            FileTypeRegInfo fileReg = new FileTypeRegInfo(".ml3");
            fileReg.Description = "MyLog3 日志文件";
            fileReg.ExePath = Application.StartupPath + @"MyLog3.exe";
            fileReg.IcoPath = Application.StartupPath + @"ML3.ico";

            if (FileTypeRegister.FileTypeRegistered(fileReg.ExtendName))
            ...{
                FileTypeRegister.UpdateFileTypeRegInfo(fileReg);
            }
            else
            ...{
                FileTypeRegister.RegisterFileType(fileReg);
            }
        }

        public static void DelRegeist()//从系统中删除文件类型.ml3的关联
        ...{
            FileTypeRegister.DelFileTypeReg(".ml3");
        }

 

  只要在应用程序启动后,调用相应的方法,就可以执行增加或删除的操作。

  下一篇,数据结构检查。
  ie.2008-04-08

 

 

 

时间: 2024-09-11 01:33:39

Vs2005之简单日志工具的制作--4.文件类型注册的相关文章

Vs2005之简单日志工具的制作--6.启动

下面说说系统的启动. 说到启动,就又想起了.net另一个让人郁闷的地方:winform程序相比其他开发工具(比如delphi)产生的程序,启动速度太慢了.启动一个winform程序,可能过了好久系统才真正进入.在这个过程中,如果能将启动条理化,并反应出来,让人看到什么时候程序在做什么,也是一个不错的办法. 打开MyLog3的解决方案,在MyLog3项目中可以找到一个窗口TfrmConver,它看起来像这个样子:         这个界面希望它能够做两件事情: 一是启动的时候,显示一些启动信息:二

Vs2005之简单日志工具的制作--3.系统配置

系统配置可以分为好多种,ini的,注册表或者其他的.在TSysConfig中,引用了两个类:TSysIni和TSysReg.前者提供系统的ini配置服务,后者提供系统的注册表配置服务. private TSysIni FSysIni;private TSysReg FSysReg;  下面行说Ini服务TSysIni. 这个类需要完成的功能比较简单,它要提供一些系统配置的存取操作.一般来说,写入ini是这样进行的:WriteString(string big,string small,strin

Vs2005之简单日志工具的制作--5.数据结构检查

前面说过,所有的管理信息都以DataSet的形式存入了ml3文件中,那么,我们需要一个类,它能够读取这个ml3文件,并且将读取的结果返回给我们: class TSysData    ...{        private DataSet FDataSet;         public DataSet DataSet        ...{            get            ...{                return FDataSet;            }   

vs2005自带部署工具制作的安装文件,安装后,用桌面或开始菜单快捷方式起动,总是运行windows installer

问题描述 vs2005自带部署工具制作的安装文件,安装后,用桌面或开始菜单快捷方式起动,总是运行windowsinstaller,如果移动了原始安装文件,就无法正常起动,好像安装后的程序的运行离不开原始安装文件.但如果进入安装后的文件夹,直接运行程序,则没有这个问题.高手帮忙! 解决方案 解决方案二:可能是你的快捷方式位置指定的不正确,你可以在安装项目里找到EXE程序用IDE自动给它生成快捷方式,然后复制到你想放置的安装目录.解决方案三:不会吧,难道没有高手知道???解决方案四:看你的快捷方式指

Photoshop入门实例教程:简单拼贴图的制作方法

本教程介绍简单拼贴图的制作方法.大致过程:处理之前需要用网格及辅助线把素材均分成一些小方块,然后分别用选区把这些小方块复制到新的图层,适当给小方块描边并添加投影.最后把小方法变形处理,再改变背景颜色即可.原图 最终效果 [1] [2] [3]  下一页

阿里云有什么监控CPU和内存的日志工具

监控CPU和内存的日志工具 Linux 工具: 下载地址:get_cpu_mem_info_sh.rar 使用方法: 下载该文件解压后,上传到 /tmp 目录中. 运行 cd 切换到/tmp目录. 执行: nohup bash get_cpu_mem_info.sh & 该工具会在 /tmp 目录下生成一个日志文件,记录实时监控系统的 CPU.内存的使用情况,等到系统异常时可以用于分析日志. Windows 工具: 下载地址:get_cpu_mem_info_bat.rar 使用方法: 下载该文

PS矢量工具快速制作促销海报字体教程

  这篇教程教脚本之家的PS文字效果学习者们使用PS矢量工具快速制作促销海报字体方法,教程制作出来的文字效果挺漂亮的,制作的难度一般,主要是和大家浅谈利用PS矢量工具打造字体的技巧,推荐一下和脚本之家的朋友们一起分享学习了! 教程结束,以上就是PS矢量工具快速制作促销海报字体教程,从这篇教程里,我们可以学习PS矢量工具的运用,希望大家能熟练运用! 分类: PS文字教程

php实现的简单日志写入函数

 本文实例讲述了php实现的简单日志写入函数.分享给大家供大家参考.具体实现方法如下: 1 2 3 4 5 6 7 8 9 function log( $logthis ){ file_put_contents('logfile.log', date("Y-m-d H:i:s"). " " . $logthis. "rn", FILE_APPEND | LOCK_EX); } // use rn for new line on windows,

Node.js和MongoDB实现简单日志分析系统

  Node.js和MongoDB实现简单日志分析系统  这篇文章主要介绍了Node.js和MongoDB实现简单日志分析系统,本文给出了服务器端.客户端.图表生成.Shell自动执行等功能的实现代码,需要的朋友可以参考下     在最近的项目中,为了便于分析把项目的日志都存成了JSON格式.之前日志直接存在了文件中,而MongoDB适时闯入了我的视线,于是就把log存进了MongoDB中.log只存起来是没有意义的,最关键的是要从日志中发现业务的趋势.系统的性能漏洞等.之前有一个用Java写的