国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

VC++實現(xiàn)文件與應(yīng)用程序關(guān)聯(lián)的方法(注冊表修改)

2020-05-23 14:01:16
字體:
供稿:網(wǎng)友

本文實例講述了VC++實現(xiàn)文件與應(yīng)用程序關(guān)聯(lián)的方法。分享給大家供大家參考,具體如下:

日常工作中,doc文件直接雙擊后,就能啟動word軟件,并讀取該文檔的內(nèi)容在軟件中顯示,這都得益于注冊表的配置,我們的軟件也需要實現(xiàn)這樣的功能,該如何寫注冊表以及寫入哪些內(nèi)容呢?下面的兩個函數(shù)就能實現(xiàn)這個功能。CheckFileRelation是檢查注冊表中是否已經(jīng)將我們期待的文件格式與相應(yīng)軟件關(guān)聯(lián)了;RegisterFileRelation是直接往注冊表中寫入相關(guān)的key和value。

/***************************************************** 檢測文件關(guān)聯(lián)情況* strExt: 要檢測的擴展名(例如: ".txt")* strAppKey: ExeName擴展名在注冊表中的鍵值(例如: "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: 要檢測的擴展名(例如: ".txt")* strAppName: 要關(guān)聯(lián)的應(yīng)用程序名(例如: "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);}

有了這兩個函數(shù)后,可以實現(xiàn)文檔和軟件的關(guān)聯(lián)了,但是雙擊文檔后,又是如何讀取文檔的內(nèi)容的呢?這里主要是用到了命令行參數(shù),我們需要在CTestApp的InitInstance函數(shù)獲取命令行參數(shù),如:

BOOL CTestApp::InitInstance(){  //這里的m_lpCmdLine是CWinApp的成員變量,雙擊文檔時,文檔的路徑會傳給該參數(shù)  CString pathName = m_lpCmdLine;  if (pathName != _T(""))  {   //TODO:讀取文件、解析文件、呈現(xiàn)文件  }}

希望本文所述對大家VC++程序設(shè)計有所幫助


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 天柱县| 天门市| 东乡| 吴忠市| 北宁市| 广平县| 电白县| 林西县| 都兰县| 天水市| 灵川县| 凤翔县| 调兵山市| 昌黎县| 睢宁县| 都昌县| 石门县| 获嘉县| 景泰县| 济南市| 万安县| 永宁县| 临海市| 凌源市| 许昌市| 奉节县| 法库县| 原阳县| 通山县| 南部县| 崇礼县| 黑河市| 丰城市| 营山县| 方城县| 宁河县| 华坪县| 随州市| 从江县| 吴堡县| 乌海市|