最近,项目中经常碰到需要先打开软件,然后再加载相应的工程文件这样的繁琐操作,为了更好的客户体验,遂决定添加文件关联
有了这个想法之后,立马付诸行动,首先想到的当然是百度相关代码并xx之,正所谓前人栽树后人乘凉嘛,然而可能是我使用的方法不对,抄来的代码总是达不到理想的效果,然后只能自己造了呗,仔细拜读前人代码,将主要的操作定位到注册表
/*******************************************************************
* 注册文件关联
*
* 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)
原文地址:https://blog.csdn.net/gnibuoz/article/details/60878059