Qt 操作注册表实现文件关联

最近,项目中经常碰到需要先打开软件,然后再加载相应的工程文件这样的繁琐操作,为了更好的客户体验(主要是自己想偷懒),遂决定添加文件关联,


文件关联:是将一种类型的文件与一个可以打开它的程序建立起一种依存关系。举个栗子来说,位图文件(BMP文件)在Windows中的默认关联程序是“图片”,如果将其默认关联改为用ACDSee程序来打开,那么ACDSee就成了它的默认关联程序。(转自 百度百科)


有了这个想法之后,立马付诸行动,首先想到的当然是百度相关代码并xx之,正所谓前人栽树后人乘凉嘛,然而可能是我使用的方法不对,抄来的代码总是达不到理想的效果,然后只能自己造了呗,仔细拜读前人代码,将主要的操作定位到注册表[]HKEY_CURRENT_USER\\Software\\Classes]这个位置处,打开注册表编辑器,找到对应的位置处:

如图:


随便下拉浏览了下内容,突然看到了熟悉的QtProject.QtCreator.xx之类的东西,看名字也大概能看出来,这不就是QtCreator相关文件的关联设置吗,于是随便点开查看,以UI文件为例,如下图




看起来也没什么啊,好像挺简单的,顾名思义,DefaultIcon就是默认图标,shell就是打开文件时的命令(源于之前的经验),好像很简单啊,

于是就先照猫画虎,通过以下代码创建类别以及其子类相关数据:


待续...


这是最终代码:


/*******************************************************************
* 注册文件关联
* 
*  className    // 自定义的类别
*  appPath      // 关联的程序目录
*  ext          // 关联的文件类型
*  extDes       // 该文件类型描述
* 
*******************************************************************/
void registerFileRelation(const QString& className,const QString& appPath,const QString& ext,const QString& extDes)
{
    QString baseUrl("HKEY_CURRENT_USER\\Software\\Classes");    // 要添加的顶层目录
	QSettings settingClasses(baseUrl,QSettings::NativeFormat);
	
	// 在...Classes\类别下创建一个新的类别,并设置该类别打开文件时的调用参数
	settingClasses.setValue("/" + className + "/Shell/Open/Command/.","\"" + appPath + "\" \"%1\"");	
	
	// 文件类型描述
	settingClasses.setValue("/" + className + "/.",extDes);
	
	// 设置该类别的默认图标默认图标
	settingClasses.setValue("/" + className + "/DefaultIcon/.",appPath + ",0");
	
	// 关联ext 和 类别
	settingClasses.setValue("/" + ext + "/OpenWithProgIds/" + className,"");
	
	// 立即保存该修改
	settingClasses.sync();																				
}



QString className("xxx.yyy.com");                           // 自定义的类别
QString appPath("D:\\Program Files\\MyProgram.exe");        // 关联的程序目录
QString ext(".proj");                                       // 关联的文件类型
QString extDes("xx 工程文件");                              // 该文件类型描述


registerFileRelation(className,appPath,ext,extDes)



你可能感兴趣的:(Qt,Qt,注册表,windows,文件关联)