双击文件实现自动关联

18 篇文章 1 订阅

实现的目的:通过点击自己自定义的文件,打开自己编写的系统。
要解决问题的步骤分成两步。
第一步: 要实现的步骤必须要先修改注册表,这样你才能 双击文件实现文件与系统 的关联。
第二步: 假如你已经修改注册表已经成功,你双击文件是会向程序的main函数传递两个参数argv[0]、argv[1]。 第一个参数 为程序的exe文件路径,第二个为你双击文件的路径。因此你可以在你所写的程序中通过argv[1]来打开文件。
总结:通过修改注册表,在获得argv[1]参数来实现我们需要实现的功能。
第一步注册表修改详细步骤:
首先注册表改成什么样才能进行文件关联呢?
你可以注册表管理,通过可视化来理解修改注册表的过程,大致要了解注册表文件夹的用处
在这里插入图片描述
创建一个.txt的文件夹,并在文件夹里存放另一个文件夹的名字(会自动找到那个文件夹),然后通过那个文件夹设置图标和程序执行的地方。
再次不在赘述,可参考https://blog.csdn.net/lfw19891101/article/details/6103032

编写代码

首先我是用Qt进行编写的,但是后来虽然想出来了,但并不是自己所想的那样,因为还要手动运行自己所写修改注册表的问题,很麻烦,而且自己在电脑上运行一次就不需要再次运行,以下为Qt实现步骤,希望可以给各位点思路。

/*******************************************************************
* 注册文件关联
* 
*  className    // 自定义的类别
*  appPath      // 关联的程序目录
*  ext          // 关联的文件类型
*  extDes       // 该文件类型描述
* 
*******************************************************************/
void registerFileRelation(const QString& className,const QString& appPath,const QString& ext,const QString& extDes)
{
    QString baseUrl("HKEY_CURRENT_ROOT");    // 要添加的顶层目录
	QSettings settingClasses(baseUrl,QSettings::NativeFormat);
	
	// 在...Classes\类别下创建一个新的类别,%1是为了系统提供你运行参数时argv[1],获取该文件的路径。
	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)

因此我想到了另外一个步骤通过打包软件,把自己所写的程序进行打包,把修改注册表的步骤放到安装文件的脚本里面,进而在安装程序的过程中就可以实现注册表的修改,结果符合自己的期望。
打包的软件为NSIS,关于这个软件修改注册表的方法自己可以去百度下。

Section ".txt" Note
DetailPrint "关联 txt 文件..."
SectionIn 1
#设置该类型文件关联的文件夹,并添加文件类型解释。

WriteRegStr HKCR ".txt" "" "Note.file"
WriteRegStr HKCR "Note.file" "" "文本文件 (.txt)"
#设置图标,当然你可以不设置默认的图标,直接把路径换成图片的路径,不用0了
WriteRegStr HKCR "Note.file\DefaultIcon" "" "$INSTDIR\Note.exe,0"
#主要是建立command,添加可执行程序,并携带文件路径(%1)
WriteRegStr HKCR "Note.file\shell" "" ""
WriteRegStr HKCR "Note.file\shell\open" "" ""
WriteRegStr HKCR "Note.file\shell\open\command" "" '"$INSTDIR\Note.exe" "%1"'
SectionEnd
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风赤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值