`
feipigwang
  • 浏览: 741856 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

自动注册自定义文件类型

 
阅读更多

在我们自己编写的应用中,经常会用自定义类型的文件的来保存与应用相关的数据,比如.xcf文件就是XCodeFactory应用程序的项目文件。如果没有向Windows注册表注册该文件类型,那么.xcf文件的图标将是windows的文件默认图标,并且你双击一个a.xcf文件,也不会自动启动XCodeFactory应用程序来加载a.xcf文件。如何使.xcf文件的图标变成我自己喜爱的图标、如何完成像点击.doc文件就自动打开word程序的功能,下面将告诉你解决方案。
我们可以通过手动修改注册表来完成上述任务,更好的方式是,通过程序来实现。这样,在安装应用程序时,就可以自动的注册自定义文件类型了。我通过FileTypeRegister静态类来完成这些功能。首先,将注册需要用到的信息封装成FileTypeRegInfo,定义如下:

publicclassFileTypeRegInfo
{
/**////<summary>
///目标类型文件的扩展名
///</summary>

publicstringExtendName;//".xcf"

/**////<summary>
///目标文件类型说明
///</summary>

publicstringDescription;//"XCodeFactory项目文件"

/**////<summary>
///目标类型文件关联的图标
///</summary>

publicstringIcoPath;

/**////<summary>
///打开目标类型文件的应用程序
///</summary>

publicstringExePath;

publicFileTypeRegInfo()
{
}


publicFileTypeRegInfo(stringextendName)
{
this.ExtendName=extendName;
}

}

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

/**////<summary>
///FileTypeRegister用于注册自定义的文件类型。
///zhuweisky2005.08.31
///</summary>

publicclassFileTypeRegister
{
RegisterFileType#regionRegisterFileType
/**////<summary>
///RegisterFileType使文件类型与对应的图标及应用程序关联起来。
///</summary>

publicstaticvoidRegisterFileType(FileTypeRegInforegInfo)
{
if(RegistryHelper.FileTypeRegistered(regInfo.ExtendName))
{
return;
}


stringrelationName=regInfo.ExtendName.Substring(1,regInfo.ExtendName.Length-1).ToUpper()+"_FileType";

RegistryKeyfileTypeKey
=Registry.ClassesRoot.CreateSubKey(regInfo.ExtendName);
fileTypeKey.SetValue(
"",relationName);
fileTypeKey.Close();

RegistryKeyrelationKey
=Registry.ClassesRoot.CreateSubKey(relationName);
relationKey.SetValue(
"",regInfo.Description);

RegistryKeyiconKey
=relationKey.CreateSubKey("DefaultIcon");
iconKey.SetValue(
"",regInfo.IcoPath);

RegistryKeyshellKey
=relationKey.CreateSubKey("Shell");
RegistryKeyopenKey
=shellKey.CreateSubKey("Open");
RegistryKeycommandKey
=openKey.CreateSubKey("Command");
commandKey.SetValue(
"",regInfo.ExePath+"%1");

relationKey.Close();
}


/**////<summary>
///GetFileTypeRegInfo得到指定文件类型关联信息
///</summary>

publicstaticFileTypeRegInfoGetFileTypeRegInfo(stringextendName)
{
if(!RegistryHelper.FileTypeRegistered(extendName))
{
returnnull;
}


FileTypeRegInforegInfo
=newFileTypeRegInfo(extendName);

stringrelationName=extendName.Substring(1,extendName.Length-1).ToUpper()+"_FileType";
RegistryKeyrelationKey
=Registry.ClassesRoot.OpenSubKey(relationName);
regInfo.Description
=relationKey.GetValue("").ToString();

RegistryKeyiconKey
=relationKey.OpenSubKey("DefaultIcon");
regInfo.IcoPath
=iconKey.GetValue("").ToString();

RegistryKeyshellKey
=relationKey.OpenSubKey("Shell");
RegistryKeyopenKey
=shellKey.OpenSubKey("Open");
RegistryKeycommandKey
=openKey.OpenSubKey("Command");
stringtemp=commandKey.GetValue("").ToString();
regInfo.ExePath
=temp.Substring(0,temp.Length-3);

returnregInfo;
}


/**////<summary>
///UpdateFileTypeRegInfo更新指定文件类型关联信息
///</summary>

publicstaticboolUpdateFileTypeRegInfo(FileTypeRegInforegInfo)
{
if(!RegistryHelper.FileTypeRegistered(regInfo.ExtendName))
{
returnfalse;
}



stringextendName=regInfo.ExtendName;
stringrelationName=extendName.Substring(1,extendName.Length-1).ToUpper()+"_FileType";
RegistryKeyrelationKey
=Registry.ClassesRoot.OpenSubKey(relationName,true);
relationKey.SetValue(
"",regInfo.Description);

RegistryKeyiconKey
=relationKey.OpenSubKey("DefaultIcon",true);
iconKey.SetValue(
"",regInfo.IcoPath);

RegistryKeyshellKey
=relationKey.OpenSubKey("Shell");
RegistryKeyopenKey
=shellKey.OpenSubKey("Open");
RegistryKeycommandKey
=openKey.OpenSubKey("Command",true);
commandKey.SetValue(
"",regInfo.ExePath+"%1");

relationKey.Close();

returntrue;
}


/**////<summary>
///FileTypeRegistered指定文件类型是否已经注册
///</summary>

publicstaticboolFileTypeRegistered(stringextendName)
{
RegistryKeysoftwareKey
=Registry.ClassesRoot.OpenSubKey(extendName);
if(softwareKey!=null)
{
returntrue;
}


returnfalse;
}

#endregion

}

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

[STAThread]
staticvoidMain(string[]args)
{
if((args!=null)&&(args.Length>0))
{
stringfilePath="";
for(inti=0;i<args.Length;i++)
{
filePath
+=""+args[i];
}


MainForm.XcfFilePath
=filePath.Trim();
}


Application.Run(
newMainForm());
}

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

分享到:
评论

相关推荐

    FlashFXP_4.0.0.1534 自动注册绿色版!好工具共享给大家。

    可以自定义不同文件类型的显示颜色;可以缓存远端文件夹列表,支持FTP代理及Socks 4&5;具有避免空闲功能,防止被站点踢出. * 初次运行时提示输入KEY,点“输入代码”即可自动注册。 * 此版本汉化较完全,稳定可靠...

    自动隐藏复制U盘文件 Hidden Flash Card Copier 注册版 [免费版]

    Hidden Flash Card Copier 是一款快速的文件复制工具,程序的特色功能是可以帮助你自动的将闪卡、U盘或者其他存储卡中的文件自动的复制到你设定的指定的目录中去,程序运行后自动隐藏,...,程序就自动开始复制文件...

    Office和PDF自动转换为SWF文件O2FServer V1.2

    较上一版本更正了文件名中有空格时转换失败的BUG,优化了转换代码,增加可监视2个文件夹及自定义文档类型。 Print2Flash可使用最新试用版,下载地址:http://print2flash.com/,无需注册,转换出的SWF文件每页底部...

    创建C++自定义类让Lua脚本调用

     步骤二:根据自定义类创建一个.pkg文件,我们把自定义的MySprite类定义到.pkg文件中  注意:1&gt;,只要根据自定类.h中的内容,至于.cpp的实现,binding后lua会自动调用类的函数  2&gt;,书写.pkg文件时要注意几条...

    魔兽rpg编程 脚本 j文件编辑 Jass shop

    人性化的操作 主程序支持参数,可以通过config.exe在注册表中注册文件类型,从而双击打开相关类型文件。如果已经有一个JassShopPro在运行中,再次双击注册为用JSP打开的类型的文件时,将在已启动的文档中打开文件。...

    LeafSyntaxHighlighter

    一个简单的应用程序,将Vapor Leaf的.leaf文件类型注册为html到LaunchServices,以在Xcode中自动突出显示语法。 包括文件类型的自定义文件图标。 将文件类型注册为LaunchServices作为自定义文档类型,使文件图标...

    优影文件整理工具_下载店数据整理

    5、关于“网络获取电影的图片和内容” 这是付费注册用户功能,要求第一部电影一个文件夹,然后本程序会自动在优影服务器寻找电影的海报图片和内容提要文件,并且自动下载到这部电影的文件夹中。有些电影可能会找不到...

    AutoPlay_Menu_Builder6.0.1328注册版

     :菜单程序文件:光盘图标:自动运行配置文件:菜单数据文件,如果在选项对话框中激活了创建可独立运行的执行文件选项,则不需要:特殊字体目录使用模板从模板新建项目点击菜单文件-&gt;新建或工具栏按钮新建,将会弹...

    AutoPlay_Menu_Builder5.5.0.1328注册版

     :菜单程序文件:光盘图标:自动运行配置文件:菜单数据文件,如果在选项对话框中激活了创建可独立运行的执行文件选项,则不需要:特殊字体目录使用模板从模板新建项目点击菜单文件-&gt;新建或工具栏按钮新建,将会弹...

    FlashFXP 4.4.0完美破解版本

    可以自定义不同文件类型的显示颜色; 可以缓存远端文件夹列表,支持FTP代理及 Socks 3&4; 具有避免空闲功能,防止被站点踢出; 可以显示或隐藏“隐藏”属性的文件、文件夹; 支持每个站点使用被动模式等! 这...

    FlashFXP_v4.4.0

    可以自定义不同文件类型的显示颜色; 可以缓存远端文件夹列表,支持FTP代理及 Socks 3&4; 具有避免空闲功能,防止被站点踢出; 可以显示或隐藏“隐藏”属性的文件、文件夹; 支持每个站点使用被动模式等! 这...

    EASY CHM CHM制作工具

    支持导入任意的文件类型; c.. 自动生成CHM的目录列表并自动生成所有目录项; d.. 为CHM的目录列表自动添加多级编号; e.. 批量更换CHM目录各项的图标; f.. 支持批量查找替换多级目录各项的标题文字内容;...

    多语种 网址缩短防封源码 短网址源码 短链接生成源码 网址生成源码 支持自定义广告

    注册用户可以绑定自己域名,用来做防封。支持直连、跳转、框架、密码访问等。不用购买大量域名来做防封。支持自定义广告。 可以设置用户等级权限用来盈利。 专业的短网址源码,完整的后台管理、功能齐全的用户面板...

    文件夹美化工具(Dr. Folder)2.6.6.3单文件版

    Dr. Folder 是一款界面友好、功能强大、简单易用的文件夹美化工具,只需简单的点击几次,即可快速地更改任意文件夹的标准图标,使其变成生动活泼、...需要Net4.0,自动注册,便携单文件,Win10闪退请用兼容模式运行

    FlashFXP最新版4.4.2

    可以自定义不同文件类型的显示颜色;可以缓存远端文件夹列表,支持FTP代理及 Socks 3&4;具有避免空闲功能,防止被站点踢出;可以显示或隐藏“隐藏”属性的文件、文件夹;支持每个站点使用被动模式等! FlashFXP 4 ...

    如何编写批处理文件批处理文件批处理文件

    简明批处理教程22009年10月20日 星期二 下午 05:35 最近对于批处理技术的探讨比较热,也有不少好的批处理程序发布,但是如果没有一定的相关知识恐怕不容易看懂和理解这些批处理文件,也就更谈不上自己动手编写了,古...

    flashfxp 4.0.0 绿色中文版

    可以自定义不同文件类型的显示颜色;可以缓存远端文件夹列表,支持FTP代理及 Socks 3&4;具有避免空闲功能,防止被站点踢出;可以显示或隐藏“隐藏”属性的文件、文件夹;支持每个站点使用被动模式等 flashfxp ...

    基于ssm+Vue的基于Word自动出题系统(源码+部署说明+系统介绍+数据库).zip

    教师可以通过Word模板,自定义试卷的题型、难度、分值等参数,然后通过系统自动生成试卷。同时,系统还提供了试卷批改功能,方便教师对试卷进行评分和反馈。系统主要包括以下功能: 1. 用户注册与登录:教师可以...

    ARCHPR 4.54简体中文注册版.rar

    本版本为简体中文特别版,直接安装后即是注册版。可以自定义暴力范围选项以及密码长度,如果使用字典模式,需要有字典文件的配合。运行时会自动保存项目,以方便下次接着运行。有时候,我们在网上下载的资源在解压的...

Global site tag (gtag.js) - Google Analytics