国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 呼玛县| 桓台县| 迁西县| 宜州市| 从化市| 康马县| 贵州省| 贵溪市| 青海省| 石城县| 梅州市| 阳高县| 肇东市| 绥棱县| 元朗区| 亳州市| 广丰县| 西藏| 渑池县| 武鸣县| 临城县| 城口县| 福州市| 防城港市| 乳山市| 旬邑县| 汽车| 万荣县| 万载县| 西平县| 鲜城| 广灵县| 平利县| 若尔盖县| 遂川县| 阿鲁科尔沁旗| 深泽县| 齐河县| 抚州市| 弋阳县| 拜泉县|