【问题标题】:Getting Default browser获取默认浏览器
【发布时间】:2010-10-18 12:09:44
【问题描述】:

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

默认浏览器值存储在注册表的什么位置?

【问题讨论】:

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


    【解决方案1】:

    您通常不需要知道这一点。 ShellExecute(0,0,"http://stackoverflow.com",0,0,SW_SHOWNORMAL); 会成功的。 Windows 将发现 http:// 并从那里确定您要打开一个 URL。 “默认”网络浏览器几乎被定义为 Windows 用于此任务的网络浏览器。

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

    【讨论】:

    • 这没有回答问题。 OP 没有说他需要启动浏览器,他说他需要知道它是什么。也就是说,从不推荐ShellExecute,因为它存在安全风险。我知道,在你的情况下不是。但一般不建议使用ShellExecute
    【解决方案2】:

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

    即对于 Windows XP 和 Vista 位于

    HKEY_LOCAL_MACHINE\Software\Clients\StartMenuInternet\
    

    【讨论】:

    • 而不是这个检查这个 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.html\UserChoice 这给出了机器中的默认浏览器
    • sabu:这不一定给你默认浏览器,只给你打开html文件的默认程序。在我的机器上,ultraedit 是 htmlfiles 的默认设置。
    • 您可以从“HKCU\SOFTWARE\Clients\StartMenuInternet”获取默认浏览器的名称,并通过 HKLM 键查找命令行
    【解决方案3】:

    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
    • 铬 21.0.1180.60 米:Google Chrome
    • Firefox 10.0.2:FIREFOX.EXE
    • Safari 3.2.2:Safari.exe
    • 歌剧 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。它将处理打开用户的默认浏览器。
    • 好问题!当我运行测试时,我的开始菜单中没有显示互联网图标,但它工作正常。至于您的第二部分,最初的问题是“如何检测默认浏览器”。如果您不想打开网页怎么办。在我的情况下,ShellExecute 不起作用,因为我想让我的插件安装程序仅在默认浏览器中安装插件。
    【解决方案4】:

    顾名思义,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()

    【讨论】:

      【解决方案5】:

      读取HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet 的默认值,并可选择检查HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\XXX\shell\open\command,其中XXX 是从第一个键中提取的值。

      【讨论】:

      • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.html\UserChoice
      猜你喜欢
      • 2023-03-28
      • 2011-09-27
      • 2017-11-30
      • 1970-01-01
      • 2020-05-05
      • 1970-01-01
      • 2014-08-10
      • 2012-07-19
      • 2012-01-29
      相关资源
      最近更新 更多