VC++完成文件與運用法式聯系關系的辦法(注冊表修正)。本站提示廣大學習愛好者:(VC++完成文件與運用法式聯系關系的辦法(注冊表修正))文章只能為提供參考,不一定能成為您想要的結果。以下是VC++完成文件與運用法式聯系關系的辦法(注冊表修正)正文
本文實例講述了VC++完成文件與運用法式聯系關系的辦法。分享給年夜家供年夜家參考,詳細以下:
平常任務中,doc文件直接雙擊後,就可以啟動word軟件,並讀取該文檔的內容在軟件中顯示,這都得益於注冊表的設置裝備擺設,我們的軟件也須要完成如許的功效,該若何寫注冊表和寫入哪些內容呢?上面的兩個函數就可以完成這個功效。CheckFileRelation是檢討注冊表中能否曾經將我們等待的文件格局與響應軟件聯系關系了;RegisterFileRelation是直接往注冊表中寫入相干的key和value。
/**************************************************** * 檢測文件聯系關系情形 * strExt: 要檢測的擴大名(例如: ".txt") * strAppKey: ExeName擴大名在注冊表中的鍵值(例如: "txtfile") * 前往TRUE: 表現已聯系關系,FALSE: 表現未聯系關系 ******************************************************/ 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; }
/**************************************************** * 注冊文件聯系關系 * strExe: 要檢測的擴大名(例如: ".txt") * strAppName: 要聯系關系的運用法式名(例如: "C:/MyApp/MyApp.exe") * strAppKey: ExeName擴大名在注冊表中的鍵值(例如: "txtfile") * strDefaultIcon: 擴大名為strAppName的圖標文件(例如: *"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); }
有了這兩個函數後,可以完成文檔和軟件的聯系關系了,然則雙擊文檔後,又是若何讀取文檔的內容的呢?這裡重要是用到了敕令行參數,我們須要在CTestApp的InitInstance函數獲得敕令行參數,如:
BOOL CTestApp::InitInstance() { //這裡的m_lpCmdLine是CWinApp的成員變量,雙擊文檔時,文檔的途徑會傳給該參數 CString pathName = m_lpCmdLine; if (pathName != _T("")) { //TODO:讀取文件、解析文件、出現文件 } }
願望本文所述對年夜家VC++法式設計有所贊助。