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_s(strTemp, "%s\\DefaultIcon", strAppKey);RegCreateKey(HKEY_CLASSES_ROOT, strTemp, &hKey);RegSetValue(hKey, "", REG_SZ, strDefaultIcon, strlen(strDefaultIcon) + 1);RegCloseKey(hKey);sprintf_s(strTemp, "%s\\Shell", strAppKey);RegCreateKey(HKEY_CLASSES_ROOT, strTemp, &hKey);RegSetValue(hKey, "", REG_SZ, "Open", strlen("Open") + 1);RegCloseKey(hKey);sprintf_s(strTemp, "%s\\Shell\\Open\\Command", strAppKey);RegCreateKey(HKEY_CLASSES_ROOT, strTemp, &hKey);sprintf_s(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:讀取文件、解析文件、呈現文件 } }?
轉載于:https://www.cnblogs.com/lujin49/p/5040513.html
總結
以上是生活随笔為你收集整理的VC++ 实现文件与应用程序关联的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库连接客户端使用(db2,oracl
- 下一篇: Java大神推荐,java编程基础必备(