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)



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章