首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Windows 10上通过注册表查找默认浏览器

如何在Windows 10上通过注册表查找默认浏览器
EN

Stack Overflow用户
提问于 2015-09-02 21:42:29
回答 3查看 76.6K关注 0票数 17

在Windows 10之前的Windows版本中,我可以从以下注册表项获取默认浏览器:

代码语言:javascript
运行
复制
HKEY_CURRENT_USER\SOFTWARE\Clients\StartMenuInternet

在Windows 10上,我将Microsoft Edge设置为默认浏览器。但我在上面的注册表项中没有看到任何更改。

但是,在以前版本的Windows上,它可以正常工作。

如何获取Windows 10上的默认浏览器?

EN

回答 3

Stack Overflow用户

发布于 2015-09-02 22:07:55

从技术上讲,StartMenuInternet不是默认的浏览器,它只是确定当你点击开始菜单中的Internet图标时系统的反应。

在Windows 10中,默认的应用程序处理是通过位于以下位置的用户选择键完成的:

代码语言:javascript
运行
复制
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\Shell\Associations\URLAssociations\(http|https)\UserChoice

其中(http|https)是其中之一,例如仅http或仅https

ProgId引用在调用url的打开时调用的处理程序应用程序id。

可以在HKEY_CLASSES_ROOT中通过键查找ProgId的值,您需要查找Shell/Open/command的默认值。对于大多数浏览器,它将是对可执行文件的简单引用。您应该能够使用Application密钥来获取ApplicationName等。

现代应用程序会使用指定实际要启动的应用程序的DelegateExecute值来引用LaunchWinApp (这从来都不容易,不是吗?),这种情况下的ApplicationName是对应用程序中资源的引用(我不知道如何读取这些值)。

然而,你为什么要查找这些信息-如果只是打开一个网页,那么你应该使用Desktop (从Java1.6开始),例如:

代码语言:javascript
运行
复制
Desktop.getDesktop().browse(new URI("http://msn.com"));

有关如何读取支持特定url方案(https://msdn.microsoft.com/en-us/library/windows/desktop/cc144154(v=vs.85%29.aspx))的应用程序的详细信息

在Windows上,默认应用程序的控制由Default Programs应用程序决定,该应用程序读取应用程序放置在注册表中的信息。

操作系统在两个地方查找已注册的应用程序:

代码语言:javascript
运行
复制
HKEY_CURRENT_USER\SOFTWARE\RegisteredApplications

代码语言:javascript
运行
复制
HKEY_LOCAL_MACHINE\SOFTWARE\RegisteredApplications

这些注册表项下的条目是对注册表中相应位置的引用,该位置与您正在查看的ResisteredApplications注册表项的根位置相同。

例如,当你安装火狐时,它会在其中放置一个标签为Firefox的条目,其中包含值Software\Clients\StartMenuInternet\FIREFOX.EXE\Capabilities。这是引用HKEY_LOCAL_MACHINE\…\Capabilities

当您查看该位置下时,您将看到键URLAssociations,它指定了它所处理的URL。如果同时看到httphttps值,则很可能是web浏览器。应用程序的名称应该可以从Capabilities密钥中的ApplicationName值获得。此键可以引用本地化名称,也可以是其自身的本地化名称。从间接路径确定价值并不是一件微不足道的事情(值得我们自己去问)。

您可以从url的值(例如,http -> FirefoxURL)回溯到HKEY_CLASSES_ROOT\FirefoxURL\Shell\Open\Command以获得可执行文件,请再次记住,新ui应用程序是一个特例。

票数 35
EN

Stack Overflow用户

发布于 2020-05-15 15:49:50

如果这些都不起作用,我找到了一个解决方案。我遇到了一个问题,windows默认的铬浏览器目录(chromium.woolyss.com的便携版本)位于downloads文件夹,windows没有检测到缺省浏览器缺少的可执行文件,w10设置中也缺少图标。

在尝试了许多方法之后,我最终得到了一个修复方法,即更新目录值

Computer\HKEY_CLASSES_ROOT\Chromium(randomstring)\shell\open\command

在“\HKEY_CLASSES_ROOT\Chromium(随机字符串)\”中,铬的末尾的随机字母/数字对于每个人都是不同的,所以我假设只要查找铬,你就会看到它。

票数 2
EN

Stack Overflow用户

发布于 2021-11-20 23:06:10

这里的每个人都在探索未记录的注册表。You should not be doing that.

相反,您应该使用预期的、受支持的API函数:

从概念上讲,调用是:

代码语言:javascript
运行
复制
AssocQueryString(0, ASSOCSTR_EXECUTABLE, ".html", path, sizeof(path));

它在我的机器上返回:

C:\Program Files (x86)\Google\Chrome\Application\chrome.exe

示例代码(伪代码)

代码语言:javascript
运行
复制
String GetDefaultBrowser()
{
   String path;
   DWORD nChars = 1024;

   //Allocate enough space to hold nChars
   SetLength(path, nChars);

   HRESULT hr = AssocQueryString(ASSOCF_NONE, ASSOCSTR_EXECUTABLE, ".html", null, path), ref nChars);
   if (hr == E_POINTER)
   {
      //Buffer was too small; try again with larger size
      SetLength(path, nChars);
      hr = AssocQueryString(ASSOCF_NONE, ASSOCSTR_EXECUTABLE, ".html", null, path), ref nChars);
   }
   if (Failed(hr)) throw new COMException(hr);

   //Set the string buffer to size
   SetLength(path, nChars-1); // don't include the null terminator

   return path;
}

奖金闲聊

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32354861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档