【发布时间】:2010-10-18 12:09:44
【问题描述】:
如何以编程方式确定系统中的默认浏览器。代码必须使用vc++开发 有这方面的 API 吗?
默认浏览器值存储在注册表的什么位置?
【问题讨论】:
标签: visual-studio winapi visual-c++ browser mfc
如何以编程方式确定系统中的默认浏览器。代码必须使用vc++开发 有这方面的 API 吗?
默认浏览器值存储在注册表的什么位置?
【问题讨论】:
标签: visual-studio winapi visual-c++ browser mfc
您通常不需要知道这一点。 ShellExecute(0,0,"http://stackoverflow.com",0,0,SW_SHOWNORMAL); 会成功的。 Windows 将发现 http:// 并从那里确定您要打开一个 URL。 “默认”网络浏览器几乎被定义为 Windows 用于此任务的网络浏览器。
支持的不仅仅是 http://。 ShellExecute 也可以使用 https:// URL 启动默认网络浏览器。对于 mailto: URLs,它会启动默认的邮件客户端。
【讨论】:
ShellExecute,因为它存在安全风险。我知道,在你的情况下不是。但一般不建议使用ShellExecute
您可以在注册表中找到默认浏览器
即对于 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) 的注册表值,而每个浏览器都是默认浏览器。
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 并不能解决问题。
【讨论】:
ShellExecute[Ex] 并指定一个 URL。它将处理打开用户的默认浏览器。
ShellExecute 不起作用,因为我想让我的插件安装程序仅在默认浏览器中安装插件。
顾名思义,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()。
【讨论】:
读取HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet 的默认值,并可选择检查HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\XXX\shell\open\command,其中XXX 是从第一个键中提取的值。
【讨论】: