如何在 Windows 7 中将我的默认浏览器更改为未列出的程序?

Mor*_*May 26 browser windows-7 file-association

我经常使用多个浏览器,所以我编写了一个脚本,可以在任何已经运行的浏览器(或 Firefox,如果没有)中打开页面。我想将此脚本设置为我的默认浏览器。当我转到“设置关联”对话框时,选择 HTTP,然后单击“更改程序”,弹出的对话框不允许我选择除已安装的 Web 浏览器之一之外的任何内容。这似乎适用于所有协议(与文件扩展名相反,文件扩展名允许您从“其他程序”中进行选择或浏览未列出的程序)。Windows 帮助对此没有任何说明,只是说使用“浏览...”按钮,该按钮不可用。我什至尝试过第 3 方的“默认程序编辑器”,但它似乎无法做到这一点。

有没有办法可以手动将我的脚本设置为默认值(也许通过编辑注册表)?

Fac*_*tic 37

是的,您可以使用直接注册表操作编写脚本。

简短的回答

将以下各项复制到.reg文件(例如firefox.regchrome.regie.reg)中,并在您想要切换时运行它们(或使用 编写脚本reg.exe)。

对于火狐:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice]
"ProgId"="FirefoxURL"
Run Code Online (Sandbox Code Playgroud)

对于铬:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice]
"ProgId"="ChromeHTML"
Run Code Online (Sandbox Code Playgroud)

对于 IE9:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice]
"ProgId"="IE.HTTP"
Run Code Online (Sandbox Code Playgroud)

长答案

Windows 将每个用户的标准协议默认注册存储在UrlAssociations密钥下,可在以下位置找到

HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations
Run Code Online (Sandbox Code Playgroud)

与文件关联类似,链接可以有一个“默认程序”。这是一种引用UserChoice密钥的行话术语- 在httpProgId下还有一个标准的文件关联类 shell 注册,它可以更改,但浏览器的近端配置是通过默认程序(请参阅底部对此的附加评论) )。

我在这里谈论的是当您转到“控制面板”的“默认程序”部分以设置浏览器时要更改的内容:

控制面板中协议的默认程序

要直接在注册表中配置它,让我们首先检查它已经存在。在此屏幕截图中,我已导航到 中的该键regedit.exe,Chrome 是我的默认浏览器,由ChromeHTMLProgId 值指定。

导航到 regedit 中的 UrlAssociations 子项

单击链接时切换打开哪个浏览器所需的最小更改是更改要更改的每个协议ProgIdUserChoice子项下的值(可能http并且https将相同,但如果出于某种原因您想使每个在单独的浏览器中打开的那些,你可以)。

现在只需确定要用于 Firefox、IE 和您可能想要切换到的任何其他浏览器的内容即可。如果您想以编程方式确定这一点,您可以通过深入Capabilities研究浏览器注册的密钥来实现,在这里可以找到 Firefox:

HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\FIREFOX.EXE\Capabilities\URLAssociations
Run Code Online (Sandbox Code Playgroud)

HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet 是列出所有浏览器的地方,每个浏览器都应具有上述结构。

导航到 regedit 中的 Capabilities 键

通过检查您可以看到,如果我想切换到 Firefox,我会使用FirefoxURLUrlAssociations 中备份的ProgId 值。

(但是,如果您不想像这样深入研究,有一个快速的秘籍:只需将您想要的任何浏览器设置为默认值,然后刷新 regedit 以查看浏览器为UserChoice!设置的内容!)

我们需要做的就是将该键值更改为FirefoxURL,现在链接在 Firefox 中打开。这样做后,您可以单击链接或在控制面板中仔细检查是否已注册正确的默认值:

仔细检查控制面板中的默认程序

现在,如果您一直密切关注,您可能已经注意到所有这些的一些缺陷:

  1. IEURLAssociations在它的浏览器注册下没有子键StartMenuInternet,那么 ProgId 值从何而来?答:我不知道,至少在没有更多研究的情况下不会。它可能是硬编码的,或者在我还没有找到的另一个密钥中找到。

  2. Firefox 的 ProgId 在它的下面URLAssociationsFirefoxURL,但是当您单击以在浏览器本身的选项中注册时,它会FirefoxHTML用作 ProgId!为什么?再说一次,我不知道。它们都有效,因为它们都存在并且指向 Firefox。也许这是故意的,但它可能只是一个没有效果的错误。

  3. 如果没有UserChoice默认程序会发生什么?回答:使用协议的“常规”文件关联(例如,http)。这是在就像文件关联(标准PROGID地点找到HKCU\Software\ClassesHKLM\Software\Classes并在该视图HKCR)。我认为,至少 Chrome 将它的信息设置在那里,但 Firefox 似乎没有,至少在我的测试中。

  4. 我建议,如果您希望将其添加到默认程序编辑器中,您应该在该应用程序的UserVoice 反馈页面上提出建议并投票。我认为应用程序作者在决定如何花费他的开发时间时会注意这些反馈!

  • 感谢您的详细回复。如果我想将已安装浏览器之一以外的其他内容设置为默认 HTTP 处理程序,我该怎么办?甚至可以将它设置为使用尚未安装到注册表中的东西吗?或者我需要为我的脚本创建一个注册表项吗? (2认同)
  • @MorganMay 您需要做的是删除“UserChoice”默认程序注册,以便使用“标准”文件关联键,如第 3 点所述。例如,查看 `HKEY_CLASSES_ROOT\http\shell\open\command` 的默认值(如果重要,您可以在 `HKEY_CURRENT_USER` 中以标准用户的身份写入相同的键)。应该只是设置应用程序路径和浏览器需要的任何参数字符串的问题(例如,`-- %1` 我认为适用于 Chrome) (2认同)