3 回答

TA貢獻2041條經驗 獲得超4個贊
您可以在此MSDN文章中找到有關該過程的基本概述。關鍵部分在列表的底部:
注冊ProgID
ProgID(本質上是文件類型注冊表項)是包含重要文件類型屬性的內容,例如圖標,描述和上下文菜單項,包括雙擊文件時使用的應用程序。許多擴展名可能具有相同的文件類型。該映射在下一步中完成:
注冊文件類型的文件擴展名
在這里,您可以為擴展名設置一個注冊表值,將該擴展名的文件類型設置為您在上一步中創(chuàng)建的ProgID。
要使用您的應用程序打開文件的最低工作量是設置/創(chuàng)建兩個注冊表項。在此示例.reg文件中,我創(chuàng)建了文件類型(blergcorp.blergapp.v1)并將文件擴展名(.blerg)與其關聯。
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Classes\blergcorp.blergapp.v1\shell\open\command]
@="c:\path\to\app.exe \"%1\""
[HKEY_CURRENT_USER\Software\Classes\.blerg]
@="blergcorp.blergapp.v1"
現在,您可能希望以編程方式完成此任務。絕對來說,您可以檢查這些鍵是否存在,并相應地更改程序行為,尤其是在假設您控制某些通用文件擴展名的情況下。但是,可以通過使用SetValue函數設置這兩個鍵來實現該目標。
我對確切的C ++語法不滿意,但是在C#中,語法看起來像這樣:
Registry.SetValue(@"HKEY_CURRENT_USER\Software\Classes\blergcorp.blergapp.v1\shell\open\command", null, @"c:\path\to\app.exe \"%1\"");
Registry.SetValue(@"HKEY_CURRENT_USER\Software\Classes\.blerg", null, "blergcorp.blergapp.v1");
當然,您可以手動打開每個子鍵,手動創(chuàng)建ProgID和擴展子鍵,然后設置鍵值,但是該SetValue功能的好處是,如果鍵或值不存在,則會自動創(chuàng)建它們。非常便利。
現在,簡短說明使用哪種配置單元。在線上的許多文件關聯示例(包括MSDN上的示例)都顯示了在中設置的這些密鑰HKEY_CLASSES_ROOT。我不建議這樣做。該配置單元是HKEY_LOCAL_MACHINE\Software\Classes(系統默認設置)和HKEY_CURRENT_USER\Software\Classes(按用戶設置)的合并虛擬視圖,并且對配置單元中的任何子項的寫入均被重定向到中的相同項HKEY_LOCAL_MACHINE\Software\Classes?,F在,這樣做沒有直接的問題,但是您可能會遇到此問題:如果您寫入HKCR(重定向到HKLM),并且用戶在HKCU中指定了相同的鍵且具有不同的值,則HKCU值將優(yōu)先。因此,您的寫入將成功,但是您將看不到任何更改,因為HKEY_CURRENT_USER設置優(yōu)先于HKEY_LOCAL_MACHINE設置。
因此,在設計應用程序時應考慮到這一點?,F在,另一方面,您可以只寫HKEY_CURRENT_USER,如我的示例所示。但是,該文件關聯設置將僅為當前用戶加載,并且如果已為所有用戶安裝了您的應用程序,則當該其他用戶在Windows中打開文件時,您的應用程序將不會啟動。

TA貢獻1827條經驗 獲得超8個贊
我不知道為什么人們總是說HKEY_CURRENT_USER\Software\Classes\<.ext>默認值(它將把您重定向到另一個(軟件創(chuàng)建的)類)。
它確實有效,但是將被覆蓋
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\<.ext>\UserChoice
我相信Microsoft建議第二種做法-因為這是內置的“打開方式”所做的。在這種情況下,Progid“鍵” 的值等于默認值HKEY_CURRENT_USER\Software\Classes\<.ext>。
- 3 回答
- 0 關注
- 656 瀏覽
添加回答
舉報