如何以编程方式确定系统中的默认浏览器.代码必须使用vc ++开发是否有任何API?
注册表中的哪个位置存储了默认浏览器值?
你通常不需要知道这一点.ShellExecute(0,0,"http://stackoverflow.com",0,0,SW_SHOWNORMAL);
会做的.Windows将发现http://并从中找出您要打开URL的信息."默认"webbrowser几乎被定义为Windows用于此任务的webbrowser.
这不仅仅是支持的http://.ShellExecute也可以使用https:// URL启动默认的Web浏览器.对于mailto:URL,它启动默认邮件客户端.
您可以在注册表中找到默认浏览器
即对于Windows XP和Vista位于
HKEY_LOCAL_MACHINE\Software\Clients\StartMenuInternet\
TL; DR:如果HKEY_CURRENT_USER\Software\Clients\StartMenuInternet\
存在则读取; 否则阅读HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\
.
在阅读了这里的答案之后,我发现了如何检测默认浏览器的一致意见,所以我做了一些实验和研究来弄明白.我下载了Firefox源代码,编写了一个脚本,该脚本读取了一堆注册表项,并且在重复更改默认浏览器的同时运行了Process Explorer.
我发现Firefox和Chrome在将每个设置为默认浏览器时会有很多注册表项.我相信Safari和Opera的行为都相似.IE似乎只更改了我正在观看的一个注册表项.
我发现虽然大多数浏览器更改了其他注册表路径,但所有浏览器都会更改 HKEY_CURRENT_USER\Software\Clients\StartMenuInternet\
(default)
以下是注册表项中的注册表值,HKEY_CURRENT_USER\Software\Clients\StartMenuInternet\
(default)
而每个浏览器都是默认浏览器.
IE 9.0.8112.16421: IEXPLORE.EXE
Chrome 21.0.1180.60 m: Google Chrome
Firefox 10.0.2: FIREFOX.EXE
Safari 3.2.2: Safari.exe
Opera 12.01: Opera
在Microsoft Windows 7 Home Premium SP1 64位上测试
编辑:
我发现在全新安装的Windows XP SP3 HKEY_CURRENT_USER\SOFTWARE\Clients\StartMenuInternet\
上不存在.在这种情况下,您应该从中读取默认浏览器HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\
.我怀疑在其他版本的Windows的全新安装中也是如此.
附录:
ShellExecute
如果你想要做的只是在默认浏览器中打开一个网页,这个方法是一个很好的解决方案.但是,如果您希望仅在默认浏览器中安装扩展程序,ShellExecute
则无法解决问题.