程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> VC++完成文件與運用法式聯系關系的辦法(注冊表修正)

VC++完成文件與運用法式聯系關系的辦法(注冊表修正)

編輯:關於C++

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++法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved