如何以编程方式确定系统中的默认浏览器。代码必须使用vc++开发 有这方面的API吗?
默认浏览器值存储在注册表的哪个位置?
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(0,0,"http://stackoverflow.com",0,0,SW_SHOWNORMAL);
就可以了。 Windows 会发现 http:// 并从中判断出您要打开的 URL。 “默认”Web 浏览器几乎被定义为 Windows 用于此任务的 Web 浏览器。
不仅仅支持http://。 ShellExecute 也可以使用 https:// URL 启动默认的 Web 浏览器。对于 mailto: URL,它会启动默认的邮件客户端。
您可以在注册表中找到默认浏览器
即对于 Windows XP 和 Vista,位于
HKEY_LOCAL_MACHINE\Software\Clients\StartMenuInternet\
顾名思义,
StartMenuInternet
用于将Web浏览器注册到开始菜单(仅适用于XP和Vista,从Windows 7开始已弃用)。这并不一定将该浏览器确立为整个系统的默认浏览器。可以通过多种不同的方式注册浏览器以用于不同的目的(加载文件、加载 URL、加载基于 MIME 类型的数据等)。每个注册都是单独的。
如何使用 Windows 开始菜单注册 Internet 浏览器或电子邮件客户端
就个人而言,我可能会查看“http”和/或“https”URL 处理程序的注册来确定默认浏览器,因为当用户在“开始”菜单或 Windows 资源管理器中键入 URL 时,将加载该应用程序,或者应用程序将 URL 传递给
ShellExecute/Ex()
。
读取
HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet
的默认值,并可选择检查 HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\XXX\shell\open\command
,其中 XXX 是从第一个键获取的值。
AssocQueryString
,则无需读取注册表。
WCHAR szPath[MAX_PATH];
DWORD size = _countof(szPath);
HRESULT err = AssocQueryString(
0,
ASSOCSTR_EXECUTABLE,
L"http",
NULL,
szPath,
&size
);
if (err != S_OK) {
return; // Handle error
}
// szPath == "C:\Program Files\Mozilla Firefox\firefox.exe"