請問,若自已有自已的檔案格式,要如何向作業系統註冊呢? |
尚未結案
|
hjcf168
一般會員 發表:1 回覆:0 積分:0 註冊:2005-01-27 發送簡訊給我 |
|
axsoft
版主 發表:681 回覆:1056 積分:969 註冊:2002-03-13 發送簡訊給我 |
hjcf168您好: 請參閱原文
http://www.maxss.net/document/cc_16.htm
標題:如何在程序中實現關聯指定的文件類型 作者:周孟兆 maxchou@163.com 日期:2003-9-7 -------------------------------------------------------------------------------- 在日常使用電腦的過程中,我們只要雙擊文件夾中各種形象化的文件圖標就可以直接啟動相關聯的軟件來打開該文件(如Word文檔),而不需要用戶關心該用什麼軟件來打開此類文件。這樣做不但方便了用戶,同時也增加了軟件的主動性及靈活性。 軟件的這種功能是如何實現的呢?接下來我就為大家介紹如何在Windows環境下為自己開發的軟件增加這樣的功能。「玩」過Windows註冊表的朋友應該都會發現在註冊表的HKEY_CLASSES_ROOT主鍵中有很多以「.」開頭的子項(如.txt),而這些子項就是最關鍵的開始。下面我就以文本文件(*.txt)為例來進行說明。 打開菜單「開始->運行...」,輸入「regedit」來啟動註冊表編輯器。然後打開HKEY_CLASSES_ROOT主鍵找到「.txt」子項,點擊後就可以在右邊查看該項的有內容。在這裡我們主要關心的是「(默認)」這一項,因為它的內容就是我們要找的下一個主鍵項。一般情況下該鍵值為「txtfile」,接下來繼續在HKEY_CLASSES_ROOT主鍵中找到「txtfile」子項,雙擊打開該項後會出現多個子項,下面說明主要的子項的用途: txtfile - DefaultIcon(顯示的文件圖標) - shell - Open - Command(用於打開該類型文件的程序路徑) - Print - Command(用於打印該類型文件的程序路徑) 有了這些信息後,只要我們在軟件中修改或建立這些相關的註冊表項及鍵值就可以實現檢測、修改(新增)各種文件類型的關聯了。 下面是我編寫的兩個函數: bool CheckFileRelation(AnsiString, AnsiString) void RegisterFileRelation(AnsiString, AnsiString, AnsiString, AnsiString, AnsiString) 分別用於實現檢測和修改(新增)文件關聯的功能,源代碼如下: //--------------------------------------------------------------------------- // 檢測文件關聯情況 // ExeName: 要檢測的擴展名(例如: ".txt") // AppKey: ExeName擴展名在註冊表中的鍵值(例如: "txtfile") // 返回true: 表示已關聯,false: 表示未關聯 bool __fastcall CheckFileRelation(AnsiString ExtName, AnsiString AppKey) { TRegistry *pReg = new TRegistry(); pReg->RootKey = HKEY_CLASSES_ROOT; // 打開主鍵 // 在檢測到本程序不是默認的文件關聯時,請用戶確認該重新關聯操作 pReg->OpenKey(ExtName, true); if (pReg->ReadString("") != AppKey) { pReg->CloseKey(); return false; } pReg->CloseKey(); return true; } //--------------------------------------------------------------------------- // 註冊文件關聯 // ExeName: 要檢測的擴展名(例如: ".txt") // AppName: 要關聯的應用程序名(例如: "C:\MyApp\MyApp.exe") // AppKey: ExeName擴展名在註冊表中的鍵值(例如: "txtfile") // Icon: 擴展名為ExeName的圖標文件(例如: "C:\MyApp\MyApp.exe, 1") // Describe: 文件類型描述 void __fastcall RegisterFileRelation(AnsiString ExtName, AnsiString AppName, AnsiString AppKey, AnsiString Icon, AnsiString Describe) { try { TRegistry *pReg = new TRegistry(); pReg->RootKey = HKEY_CLASSES_ROOT; // 打開主鍵 // 新建/打開以文件擴展名為名的項,並寫入數據 pReg->OpenKey(ExtName, true); pReg->WriteString("", AppKey); pReg->CloseKey(); pReg->OpenKey(AppKey, true); pReg->WriteString("", Describe); pReg->CloseKey(); pReg->OpenKey(AppKey "\\DefaultIcon", true); pReg->WriteString("", Icon); pReg->CloseKey(); pReg->OpenKey(AppKey "\\Shell", true); pReg->WriteString("", "Open"); pReg->CloseKey(); pReg->OpenKey(AppKey "\\Shell\\Open\\Command", true); pReg->WriteString("", AppName " %1"); pReg->CloseKey(); delete pReg; } catch(...) { MessageBox(NULL, "註冊文件關聯時發生錯誤", "注意", MB_OK|MB_ICONWARNING); } } 以上代碼我在BCB6 Windows 2000下編譯通過。 歡迎大家交流,請支持我的主頁:http://www.maxss.net /*生活是一種藝術,用心生活享受生活*/發表人 - axsoft 於 2005/01/28 14:38:48 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |