获取默认浏览器

时间:2009-04-09 07:38:30

标签: visual-studio winapi visual-c++ browser mfc

如何以编程方式确定系统中的默认浏览器。代码必须使用vc ++开发 这有什么API吗?

注册表中的哪个位置是默认的浏览器值?

5 个答案:

答案 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)中的注册表值,而每个浏览器都是默认浏览器。

  • 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无法解决问题。

答案 3 :(得分:2)

顾名思义,StartMenuInternet用于在开始菜单上注册Web浏览器(它仅适用于XP和Vista,从Windows 7开始不推荐使用)。这并不一定将浏览器建立为整个系统的默认浏览器。浏览器可以通过多种不同方式注册以用于不同目的(加载文件,加载URL,基于MIME类型加载数据等)。每个注册都是独立的。

Default Programs

How to Register an Internet Browser or Email Client With the Windows Start Menu

Registering an Application to a URL Protocol

File Types

就个人而言,我可能会查看“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是从第一个键中获取的值。