在Windows系統(tǒng)中很多瀏覽器中都有設(shè)置“默認(rèn)瀏覽器”的功能,基本上家家都有。除了瀏覽器自身的設(shè)置外,XP、Win7中也提供了很多方法來設(shè)置。特別是Win7中,專門提供了一個(gè)叫“默認(rèn)程序”的設(shè)置項(xiàng)。那么,這些瀏覽器設(shè)置背后的故事是什么呢?
要研究東西,先要明確它的范圍和定義。 那么,什么是默認(rèn)瀏覽器呢?我總結(jié)了下,主要有下面三塊內(nèi)容:
因此設(shè)置默認(rèn)瀏覽器,只需要把上面的三塊內(nèi)容分別搞清楚即可。
在Windows系統(tǒng)的設(shè)計(jì)中,一個(gè)軟件可以有多個(gè)擴(kuò)展名。為了區(qū)分不同的軟件,因此一個(gè)軟件(App)就對應(yīng)一個(gè)ProgId(Programmatic Identifiers),而一個(gè)擴(kuò)展名則與一個(gè)ProgID相關(guān)聯(lián)。當(dāng)然,一個(gè)App是可以有多個(gè)ProgId的,比如說一類來處理文件管理,一類來處理其它的關(guān)聯(lián)。
下面看一下Firefox瀏覽器的實(shí)例:
那么這些信息是保存在那里呢?
上面看到的信息都保存在注冊表中,主要位于
HKEY_CURRENT_USER\Software\Classes
HKEY_LOCAL_MACHINE\Software\Classes
為了使用方便,注冊表中單獨(dú)定義了HKEY_CLASS_ROOT根鍵,實(shí)質(zhì)上里面的內(nèi)容是HKCU和HKLM下的鍵值合并后的視圖。HKCU的優(yōu)先級(jí)會(huì)高于HKLM下的。
所以:讀要從HKEY_CLASS_ROOT下面來讀, 如果寫的話,最好寫到HKEY_CURRENT_USER下面。
看看注冊表中的鍵值:
在XP系統(tǒng)下,如果要想設(shè)置一個(gè)擴(kuò)展名關(guān)聯(lián)到一個(gè)程序,那就要把這個(gè)擴(kuò)展名的默認(rèn)值寫成該App的ProgId,然后就會(huì)從該P(yáng)rogId下讀取Shell\open\command來執(zhí)行打開操作。
在Win7系統(tǒng)下,多了一步,就是說如果下面有鍵值,則會(huì)優(yōu)先從下面鍵值中指定的ProgId中讀取:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ext\UserChoice\Progid
如果上面的Progid鍵值不存在,則會(huì)按xp下的規(guī)則執(zhí)行。
對于http、https等協(xié)議,關(guān)聯(lián)的原理基本和擴(kuò)展名差不多,但是在不同系統(tǒng)上有區(qū)別。
在XP系統(tǒng)下, http等協(xié)議不會(huì)從擴(kuò)展名的默認(rèn)值中指定的ProgId來讀取打開程序,而是直接讀取http鍵值下的shell\open\command.
如圖:
在Win7系統(tǒng)下,也是先從下面的鍵值中先讀取:
HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice\Progid
注意,讀取的是Progid,然后再從這個(gè)ProgId中讀取shell\open\command內(nèi)容。而不是
開始菜單中顯示的瀏覽器是從下面的地方讀取的:
HKEY_CURRENT_USER\Software\Clients\StartMenuInternet\
比如Firefox顯示的就是Firefox.exe.
那系統(tǒng)如何知道Firefox.exe是從哪里啟動(dòng)呢?
這個(gè)Firefox.exe是位于
HKEY_CURRENT_USER\Software\Clients\StartMenuInternet\
HKEY_LOCAL_MACHINE\Software\Clients\StartMenuInternet\
下的鍵值。
在這個(gè)鍵值下有shell\open\command\
如圖:
這個(gè)鍵值XP和Win7下都是一樣的。
xp下設(shè)置默認(rèn)瀏覽器需要修改的鍵值
改開始菜單顯示的默認(rèn)瀏覽器:
HKEY_CURRENT_USER\Software\Clients\StartMenuInternet\@
新: 字符串: "改.htm、.html等擴(kuò)展名 寫入ProgId
HKEY_CURRENT_USER\Software\Classes\.htm\@
新: 字符串: "改http、https、ftp等協(xié)議
寫入DefaultIcon
寫入shell open commandHKEY_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下需要修改的鍵值
改開始菜單顯示的默認(rèn)瀏覽器:
HKEY_CURRENT_USER\Software\Clients\StartMenuInternet\@
新: 字符串: "谷歌瀏覽器"改.htm、.html等擴(kuò)展名 寫入ProgId
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.htm\UserChoice\Progid
新: 字符串: "ChromeHTML"改http、https、ftp等協(xié)議
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
via:Greenerycn
聯(lián)系客服