如何以编程方式确定系统中的默认浏览器。代码必须使用vc ++开发 这有什么API吗?
注册表中的哪个位置是默认的浏览器值?
答案 0 :(得分:9)
您可以在注册表中找到默认浏览器
即。对于Windows XP和Vista位于
HKEY_LOCAL_MACHINE\Software\Clients\StartMenuInternet\
答案 1 :(得分:9)
您通常不需要知道这一点。 ShellExecute(0,0,"http://stackoverflow.com",0,0,SW_SHOWNORMAL);
会做到这一点。 Windows将发现http://并从中找出您要打开URL的信息。 “默认”webbrowser几乎被定义为Windows用于此任务的webbrowser。
不仅仅支持http://。 ShellExecute也可以使用https:// URL启动默认的Web浏览器。对于mailto:URL,它启动默认邮件客户端。
答案 2 :(得分:8)
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)
中的注册表值,而每个浏览器都是默认浏览器。
IEXPLORE.EXE
Google Chrome
FIREFOX.EXE
Safari.exe
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
无法解决问题。
答案 3 :(得分:2)
顾名思义,StartMenuInternet
用于在开始菜单上注册Web浏览器(它仅适用于XP和Vista,从Windows 7开始不推荐使用)。这并不一定将浏览器建立为整个系统的默认浏览器。浏览器可以通过多种不同方式注册以用于不同目的(加载文件,加载URL,基于MIME类型加载数据等)。每个注册都是独立的。
How to Register an Internet Browser or Email Client With the Windows Start Menu
Registering an Application to a URL Protocol
就个人而言,我可能会查看“http”和/或“https”URL处理程序的注册以确定默认浏览器,因为这将是用户在“开始”菜单中键入URL时加载的应用程序或Windows资源管理器或应用程序将URL传递给ShellExecute/Ex()
。
答案 4 :(得分:1)
阅读HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet
的默认值,并可选择检查HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\XXX\shell\open\command
,其中XXX是从第一个键中获取的值。