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

    xiaoxiao2021-03-25  158

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

    文件关联:是将一种类型的文件与一个可以打开它的程序建立起一种依存关系。举个栗子来说,位图文件(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)

    转载请注明原文地址: https://ju.6miu.com/read-5510.html

    最新回复(0)