VC++實(shí)現(xiàn)文件與應(yīng)用程序關(guān)聯(lián)的方法(注冊表修改)
本文實(shí)例講述了VC++實(shí)現(xiàn)文件與應(yīng)用程序關(guān)聯(lián)的方法。分享給大家供大家參考,具體如下:
日常工作中,doc文件直接雙擊后,就能啟動(dòng)word軟件,并讀取該文檔的內(nèi)容在軟件中顯示,這都得益于注冊表的配置,我們的軟件也需要實(shí)現(xiàn)這樣的功能,該如何寫注冊表以及寫入哪些內(nèi)容呢?下面的兩個(gè)函數(shù)就能實(shí)現(xiàn)這個(gè)功能。CheckFileRelation是檢查注冊表中是否已經(jīng)將我們期待的文件格式與相應(yīng)軟件關(guān)聯(lián)了;RegisterFileRelation是直接往注冊表中寫入相關(guān)的key和value。
/**************************************************** * 檢測文件關(guān)聯(lián)情況 * strExt: 要檢測的擴(kuò)展名(例如: ".txt") * strAppKey: ExeName擴(kuò)展名在注冊表中的鍵值(例如: "txtfile") * 返回TRUE: 表示已關(guān)聯(lián),F(xiàn)ALSE: 表示未關(guān)聯(lián) ******************************************************/ BOOL CheckFileRelation(const char *strExt, const char *strAppKey) { int nRet=FALSE; HKEY hExtKey; char szPath[_MAX_PATH]; DWORD dwSize=sizeof(szPath); if(RegOpenKey(HKEY_CLASSES_ROOT,strExt,&hExtKey)==ERROR_SUCCESS) { RegQueryValueEx(hExtKey,NULL,NULL,NULL,(LPBYTE)szPath,&dwSize); if(_stricmp(szPath,strAppKey)==0) { nRet=TRUE; } RegCloseKey(hExtKey); return nRet; } return nRet; }
/**************************************************** * 注冊文件關(guān)聯(lián) * strExe: 要檢測的擴(kuò)展名(例如: ".txt") * strAppName: 要關(guān)聯(lián)的應(yīng)用程序名(例如: "C:/MyApp/MyApp.exe") * strAppKey: ExeName擴(kuò)展名在注冊表中的鍵值(例如: "txtfile") * strDefaultIcon: 擴(kuò)展名為strAppName的圖標(biāo)文件(例如: *"C:/MyApp/MyApp.exe,0") * strDescribe: 文件類型描述 ****************************************************/ void RegisterFileRelation(char *strExt, char *strAppName, char *strAppKey, char *strDefaultIcon, char *strDescribe) { char strTemp[_MAX_PATH]; HKEY hKey; RegCreateKey(HKEY_CLASSES_ROOT,strExt,&hKey); RegSetValue(hKey,"",REG_SZ,strAppKey,strlen(strAppKey)+1); RegCloseKey(hKey); RegCreateKey(HKEY_CLASSES_ROOT,strAppKey,&hKey); RegSetValue(hKey,"",REG_SZ,strDescribe,strlen(strDescribe)+1); RegCloseKey(hKey); sprintf(strTemp,"%s//DefaultIcon",strAppKey); RegCreateKey(HKEY_CLASSES_ROOT,strTemp,&hKey); RegSetValue(hKey,"",REG_SZ,strDefaultIcon,strlen(strDefaultIcon)+1); RegCloseKey(hKey); sprintf(strTemp,"%s//Shell",strAppKey); RegCreateKey(HKEY_CLASSES_ROOT,strTemp,&hKey); RegSetValue(hKey,"",REG_SZ,"Open",strlen("Open")+1); RegCloseKey(hKey); sprintf(strTemp,"%s//Shell//Open//Command",strAppKey); RegCreateKey(HKEY_CLASSES_ROOT,strTemp,&hKey); sprintf(strTemp,"%s /"%%1/"",strAppName); RegSetValue(hKey,"",REG_SZ,strTemp,strlen(strTemp)+1); RegCloseKey(hKey); }
有了這兩個(gè)函數(shù)后,可以實(shí)現(xiàn)文檔和軟件的關(guān)聯(lián)了,但是雙擊文檔后,又是如何讀取文檔的內(nèi)容的呢?這里主要是用到了命令行參數(shù),我們需要在CTestApp的InitInstance函數(shù)獲取命令行參數(shù),如:
BOOL CTestApp::InitInstance() { //這里的m_lpCmdLine是CWinApp的成員變量,雙擊文檔時(shí),文檔的路徑會(huì)傳給該參數(shù) CString pathName = m_lpCmdLine; if (pathName != _T("")) { //TODO:讀取文件、解析文件、呈現(xiàn)文件 } }
希望本文所述對大家VC++程序設(shè)計(jì)有所幫助。
- C++實(shí)現(xiàn)單張圖片讀取和保存
- c++讀取數(shù)據(jù)文件到數(shù)組的實(shí)例
- C++實(shí)現(xiàn)修改函數(shù)代碼HOOK的封裝方法
- 利用C++如何覆蓋或刪除指定位置的文件內(nèi)容
- C++如何刪除map容器中指定值的元素詳解
- C++中關(guān)于set刪除的一些坑
- 淺談c++ vector和map的遍歷和刪除對象
- 詳解在C++中顯式默認(rèn)設(shè)置的函數(shù)和已刪除的函數(shù)的方法
- C++刪除指定文件夾下N天及之前日志文件的方法
- C++遞歸刪除一個(gè)目錄實(shí)例
- C++ vector刪除符合條件的元素示例分享
- C++操作文件進(jìn)行讀取、刪除、修改指定行
相關(guān)文章
C++小知識(shí):不要節(jié)約代碼行數(shù)
今天小編就為大家分享一篇關(guān)于C++小知識(shí):不要節(jié)約代碼行數(shù),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-01-01VScode搭建C/C++開發(fā)環(huán)境的詳細(xì)過程
最近迷上了vscode,小巧美觀,最主要的是全平臺(tái),但是vscode并不是ide,必須得自己配置環(huán)境,下面這篇文章主要給大家介紹了關(guān)于VScode搭建C/C++開發(fā)環(huán)境的詳細(xì)過程,需要的朋友可以參考下2023-06-06C++實(shí)現(xiàn)LeetCode(82.移除有序鏈表中的重復(fù)項(xiàng)之二)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(82.移除有序鏈表中的重復(fù)項(xiàng)之二),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07C++實(shí)現(xiàn)動(dòng)態(tài)順序表
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)動(dòng)態(tài)順序表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-05-05利用C語言實(shí)踐OOP,以及new,delete的深入分析
本篇文章是對用C語言實(shí)踐OOP,new,delete進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C語言實(shí)現(xiàn)可增容動(dòng)態(tài)通訊錄詳細(xì)過程
這篇文章主要為大家介紹了C語言實(shí)現(xiàn)簡易通訊錄的完整流程,此通訊錄還可以增容,并且每個(gè)環(huán)節(jié)都有完整代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-05-05C語言如何計(jì)算兩個(gè)數(shù)的最小公倍數(shù)
這篇文章主要介紹了C語言如何計(jì)算兩個(gè)數(shù)的最小公倍數(shù),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11C語言?深入理解動(dòng)態(tài)規(guī)劃之計(jì)數(shù)類DP
動(dòng)態(tài)規(guī)劃可謂是大名鼎鼎,筆試面試中的高頻考點(diǎn),也是重點(diǎn)難點(diǎn),動(dòng)態(tài)規(guī)劃類型題目靈活多變,難度系數(shù)也相對較高,往往我們做不好動(dòng)態(tài)規(guī)劃的題目就會(huì)與心儀的offer失之交臂,本篇文章我們就一起來研究一下動(dòng)態(tài)規(guī)劃的計(jì)數(shù)類DP2022-04-04