文章目錄
- 什麼是預設瀏覽器?
-
- 副檔名關聯
- 註冊表
- 協議關聯
- 開始菜單中顯示的瀏覽器
- 總結
-
- 參考資料
在Windows系統中很多瀏覽器中都有設定“預設瀏覽器”的功能,基本上家家都有。除了瀏覽器自身的設定外,XP、Win7中也提供了很多方法來設定。特別是Win7中,專門提供了一個叫“預設程式”的設定項。那麼,這些設定背後的故事是什麼呢?
什麼是預設瀏覽器?
要研究東西,先要明確它的範圍和定義。 那麼,什麼是預設瀏覽器呢?我總結了下,主要有下面三塊內容:
因此設定預設瀏覽器,只需要把上面的三塊內容分別搞清楚即可。
副檔名關聯
在Windows系統的設計中,一個軟體可以有多個副檔名。為了區分不同的軟體,因此一個軟體(App)就對應一個ProgId(Programmatic Identifiers),而一個副檔名則與一個ProgID相關聯。當然,一個App是可以有多個ProgId的,比如說一類來處理檔案管理,一類來處理其它的關聯。
下面看一下Firefox瀏覽器的執行個體:
那麼這些資訊是儲存在那裡呢?
註冊表
上面看到的資訊都儲存在註冊表中,主要位於
HKEY_CURRENT_USER\Software\Classes
HKEY_LOCAL_MACHINE\Software\Classes
為了使用方便,註冊表中單獨定義了HKEY_CLASS_ROOT根鍵,實質上裡面的內容是HKCU和HKLM下的索引值合并後的視圖。HKCU的優先順序會高於HKLM下的。
所以:讀要從HKEY_CLASS_ROOT下面來讀, 如果寫的話,最好寫到HKEY_CURRENT_USER下面。
看看註冊表中的索引值:
在XP系統下,如果要想設定一個副檔名關聯到一個程式,那就要把這個副檔名的預設值寫成該App的ProgId,然後就會從該ProgId下讀取Shell\open\command來執行開啟操作。
在Win7系統下,多了一步,就是說如果下面有索引值,則會優先從下面索引值中指定的ProgId中讀取:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ext\UserChoice\Progid
如果上面的Progid索引值不存在,則會按xp下的規則執行。
協議關聯
對於http、https等協議,關聯的原理基本和副檔名差不多,但是在不同系統上有區別。
在XP系統下, http等協議不會從副檔名的預設值中指定的ProgId來讀取開啟程式,而是直接讀取http索引值下的shell\open\command.
在Win7系統下,也是先從下面的索引值中先讀取:
HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice\Progid
注意,讀取的是Progid,然後再從這個ProgId中讀取shell\open\command內容。而不是
開始菜單中顯示的瀏覽器
開始菜單中顯示的瀏覽器是從下面的地方讀取的:
HKEY_CURRENT_USER\Software\Clients\StartMenuInternet\
比如Firefox顯示的就是Firefox.exe.
那系統如何知道Firefox.exe是從哪裡啟動呢?
這個Firefox.exe是位於
HKEY_CURRENT_USER\Software\Clients\StartMenuInternet\
HKEY_LOCAL_MACHINE\Software\Clients\StartMenuInternet\
下的索引值。
在這個索引值下有shell\open\command\
這個索引值XP和Win7下都是一樣的。
總結
xp下設定預設瀏覽器需要修改的索引值
改開始菜單顯示的預設瀏覽器:
HKEY_CURRENT_USER\Software\Clients\StartMenuInternet\@
新: 字串: "Google瀏覽器"
改.htm、.html等副檔名 寫入ProgId
HKEY_CURRENT_USER\Software\Classes\.htm\@
新: 字串: "ChromeHTML"
改http、https、ftp等協議
寫入DefaultIcon
寫入shell open command
HKEY_CURRENT_USER\Software\Classes\ftp\DefaultIcon\@
新: 字串: "C:\Documents and Settings\Administrator\Local Settings\Application Data\Google\Chrome\Application\chrome.exe,0"
HKEY_CURRENT_USER\Software\Classes\ftp\shell\open\command\@
新: 字串: ""C:\Documents and Settings\Administrator\Local Settings\Application Data\Google\Chrome\Application\chrome.exe" -- "%1""
Win7下需要修改的索引值
改開始菜單顯示的預設瀏覽器:
HKEY_CURRENT_USER\Software\Clients\StartMenuInternet\@
新: 字串: "Google瀏覽器"
改.htm、.html等副檔名 寫入ProgId
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.htm\UserChoice\Progid
新: 字串: "ChromeHTML"
改http、https、ftp等協議
HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice\Progid
新: 字串: "ChromeHTML"
參考資料
Programmatic Identifiers
http://msdn.microsoft.com/en-us/library/cc144152(VS.85).aspx
MSDN(VS2008附帶):
Win32 and COM Development\User Interface\Windows User Experience\Windows Shell\Windows shell\Shell Developer’s Guide\Integration of Applications into the Shell for File Format Owners
工具:RegSnap