获取默认浏览器

sub*_*bbu 7 browser winapi mfc visual-studio visual-c++

如何以编程方式确定系统中的默认浏览器.代码必须使用vc ++开发是否有任何API?

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

MSa*_*ers 10

你通常不需要知道这一点.ShellExecute(0,0,"http://stackoverflow.com",0,0,SW_SHOWNORMAL);会做的.Windows将发现http://并从中找出您要打开URL的信息."默认"webbrowser几乎被定义为Windows用于此任务的webbrowser.

这不仅仅是支持的http://.ShellExecute也可以使用https:// URL启动默认的Web浏览器.对于mailto:URL,它启动默认邮件客户端.

  • 这并不能回答问题。OP 没有说他需要启动浏览器,他说他需要知道它是什么。也就是说,永远不建议使用“ShellExecute”,因为它存在安全风险。我知道,就你的情况而言,事实并非如此。但一般情况下,不建议使用`ShellExecute` (2认同)

Kon*_*nos 9

您可以在注册表中找到默认浏览器

即对于Windows XP和Vista位于

HKEY_LOCAL_MACHINE\Software\Clients\StartMenuInternet\
Run Code Online (Sandbox Code Playgroud)


Nat*_*ate 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则无法解决问题.

  • 如果我的"开始"菜单上没有显示Internet图标,该怎么办?这仍然有用吗?在我看来,共识是你不需要知道这一点.只需使用`ShellExecute [Ex]`并指定一个URL.它将处理打开用户的默认浏览器. (2认同)