![如何在 Windows 7 中将默认浏览器更改为未列出的程序?](https://linux22.com/image/1298898/%E5%A6%82%E4%BD%95%E5%9C%A8%20Windows%207%20%E4%B8%AD%E5%B0%86%E9%BB%98%E8%AE%A4%E6%B5%8F%E8%A7%88%E5%99%A8%E6%9B%B4%E6%94%B9%E4%B8%BA%E6%9C%AA%E5%88%97%E5%87%BA%E7%9A%84%E7%A8%8B%E5%BA%8F%EF%BC%9F.png)
我经常使用多种浏览器,因此我编写了一个脚本,该脚本将在已运行的任何浏览器中打开页面(如果没有浏览器,则使用 Firefox)。我想将此脚本设置为我的默认浏览器。当我转到“设置关联”对话框,选择 HTTP,然后单击“更改程序”时,弹出的对话框不允许我选择除已安装的 Web 浏览器之外的任何内容。这似乎是所有协议的情况(与文件扩展名相反,文件扩展名允许您从“其他程序”中选择或浏览未列出的程序)。Windows 帮助对此只字未提,只是说使用“浏览...”按钮,但该按钮不可用。我甚至尝试了第三方“默认程序编辑器”,但它似乎无法做到这一点。
有什么方法可以手动将我的脚本设置为默认脚本(也许通过编辑注册表)?
答案1
是的,您可以通过直接注册表操作来编写脚本。
简短答案
将下面的每一个复制到.reg
文件中(例如firefox.reg
、chrome.reg
、ie.reg
),并在您想要切换时运行它们(或者,使用 编写脚本reg.exe
)。
对于 Firefox:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice]
"ProgId"="FirefoxURL"
对于 Chrome:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice]
"ProgId"="ChromeHTML"
对于 IE9:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice]
"ProgId"="IE.HTTP"
详细答案
Windows 将每个用户的标准协议默认注册存储在以下UrlAssociations
注册表项下:
HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations
与文件关联类似,链接可以有一个“默认程序”。这是一种引用密钥的术语 -在 ProgIdUserChoice
下还有一个标准的文件关联类 shell 注册,http
它可以还可以更改,但浏览器的近端配置是通过默认程序进行的(有关此内容的补充评论请参见底部)。
我在这里谈论的是当您进入控制面板的默认程序部分设置浏览器时所进行的更改:
要直接在注册表中配置此功能,我们首先检查一下是否存在。在此屏幕截图中,我已导航到 中的该键regedit.exe
,并且 Chrome 是我的默认浏览器,由ChromeHTML
ProgId 值指定。
要切换单击链接时打开的浏览器,您需要做的最小更改是更改要更改的每个协议的子项ProgId
下的值(可能相同,但如果由于某种原因您想让每个协议在单独的浏览器中打开,您可以)。UserChoice
http
https
现在只需确定 Firefox、IE 以及您可能想要切换到的任何其他浏览器使用什么。如果您想以编程方式确定这一点,您可以通过深入研究Capabilities
浏览器注册的密钥来实现,Firefox 的密钥如下:
HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\FIREFOX.EXE\Capabilities\URLAssociations
HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet
列出了所有浏览器,并且每个浏览器都应具有上述结构。
通过检查您可以看到,如果我想切换到 Firefox,我会FirefoxURL
在 UrlAssociations 中重新使用 ProgId 值。
(但是,如果您不想这样挖掘,那么有一个简单的秘诀:只需将您想要的任何浏览器设置为默认浏览器,然后刷新 regedit 即可查看浏览器设置了什么UserChoice
!)
我们需要做的就是将该键值更改为FirefoxURL
,现在链接将在 Firefox 中打开。完成后,您可以单击链接或在控制面板中仔细检查是否注册了正确的默认值:
现在,如果你一直密切关注,你可能会注意到这一切存在一些缺陷:
URLAssociations
IE在 中的浏览器注册下没有子项StartMenuInternet
,那么 ProgId 值从何而来? 答案:我不知道,至少在没有进一步研究的情况下不知道。它可能是硬编码的,或者在另一个我尚未找到的键中找到。Firefox 的 ProgId 在其下是
URLAssociations
,FirefoxURL
但是当您在浏览器本身的选项中单击注册时,它会FirefoxHTML
改为使用 ProgId!为什么?同样,我不知道。它们都有效,因为它们都存在并指向 Firefox。也许这是故意的,但可能只是一个没有效果的错误。如果没有默认程序会发生什么?答案:使用
UserChoice
协议的“常规”文件关联(例如)。这可以在标准 ProgId 位置找到,就像文件关联( 、和视图)一样。我认为至少 Chrome 会在那里设置它的信息,但 Firefox 似乎没有,至少在我的测试中是这样。http
HKCU\Software\Classes
HKLM\Software\Classes
HKCR
我建议,如果你想将它添加到默认程序编辑器中,你应该在该应用程序的UserVoice 反馈页面。我有充分的证据证明应用程序作者在决定如何利用其开发时间时会关注这些反馈!
答案2
发布此内容是因为这在今天的 Windows 10 上仍然具有相关性。
我看到其他答案都在谈论注册表。这很方便,但手动操作非常麻烦。因此,我想提交自己的注册表配置(在本答案的底部),这样你就不用自己做所有事情了!我之所以这样做,是因为我想使用“Ungoogled Chromium”浏览器作为默认浏览器,但没有合适的安装程序可以将应用程序添加到可用浏览器列表中。
将 .reg 文件保存到您的电脑,然后执行以下步骤:
- 编辑 .reg 文件中的路径以匹配您自己的应用程序的路径。我的路径是“C:\Program Files\Ungoogled Chromium\chrome.exe”(取自 .reg 文件)。确保它已正确转义!
- 导入 .reg 文件。
- 可选:在 %Appdata%/Roaming/Microsoft/Windows/Start Menu/Programs 中放置指向您的浏览器的快捷方式。
我遇到的唯一问题是,出于某种原因,Chromium 会一直说它不是默认浏览器,即使我已将其设为默认浏览器。在我安装 Chrome 并切换回 Chromium 后,该消息消失了。切换到 IE 然后再切换回 Chromium 后,该消息又出现了。不幸的是,我不知道为什么,但只需禁用警告即可。看起来一切都正常。
正确导入注册表文件后,浏览器就会出现在可供选择的应用程序列表中。 默认应用程序列表
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Clients\StartMenuInternet\UngoogledChromium\Capabilities]
"ApplicationDescription"="Chromium without Google's phone home."
"ApplicationIcon"="\"C:\\Program Files\\Ungoogled Chromium\\chrome.exe\",0"
"ApplicationName"="Ungoogled Chromium"
[HKEY_CURRENT_USER\Software\Clients\StartMenuInternet\UngoogledChromium\DefaultIcon]
@="C:\\Program Files\\Ungoogled Chromium\\chrome.exe,0"
[HKEY_CURRENT_USER\Software\Clients\StartMenuInternet\UngoogledChromium\Capabilities\FileAssociations]
".crx"="UngoogledChromium"
".htm"="UngoogledChromium"
".html"="UngoogledChromium"
".nex"="UngoogledChromium"
".pdf"="UngoogledChromium"
".shtml"="UngoogledChromium"
".xht"="UngoogledChromium"
".xhtml"="UngoogledChromium"
[HKEY_CURRENT_USER\Software\Clients\StartMenuInternet\UngoogledChromium\Capabilities\Startmenu]
"StartMenuInternet"="UngoogledChromium"
[HKEY_CURRENT_USER\Software\Clients\StartMenuInternet\UngoogledChromium\Capabilities\UrlAssociations]
"http"="UngoogledChromium"
"https"="UngoogledChromium"
"ftp"="UngoogledChromium"
"mailto"="UngoogledChromium"
[HKEY_CURRENT_USER\Software\Classes\UngoogledChromium]
"FriendlyTypeName"="Chromium Web Document"
"URL Protocol"=""
[HKEY_CURRENT_USER\Software\Classes\UngoogledChromium\DefaultIcon]
@="C:\\Program Files\\Ungoogled Chromium\\chrome.exe,0"
[HKEY_CURRENT_USER\Software\Classes\UngoogledChromium\shell]
[HKEY_CURRENT_USER\Software\Classes\UngoogledChromium\shell\open]
[HKEY_CURRENT_USER\Software\Classes\UngoogledChromium\shell\open\command]
@="\"C:\\Program Files\\Ungoogled Chromium\\chrome.exe\" -- \"%1\""
答案3
如果还有其他人在寻找将某些自定义内容设置为 Windows 10 中的默认协议处理程序时找到了这个答案,我想我已经破解了它。
这个问题的另一个答案让我更接近了密钥Clients\StartMenuInternet
,我不知道如何在 Windows 7 中设置默认浏览器。然而,在复制了 Firefox 的StartMenuInternet
密钥之后,我的程序仍然没有出现在设置应用中。
使用 Revo Uninstaller 开始卸载 Firefox 后,取消 Firefox 的卸载程序,然后让 Revo 扫描剩余的注册表项,我发现了另一个项:HKLM\SOFTWARE\RegisteredApplications
。这似乎存储了所有已注册的程序,Windows 可以获知它们的功能。
因此,在设置StartMenuInternet
密钥后,添加一个密钥来HKLM\SOFTWARE\RegisteredApplications
指向Software\Clients\StartMenuInternet\YOURPROGRAM\Capabilities
- 是的,就是那样,以以下内容开头Software\
:
regedit 的屏幕截图(直到我有 10 个代表后才能嵌入图像...)
答案4
为了使您的程序(YName.exe)被视为浏览器,它需要注册:
1)...StartMenuInternet - 如上所述,
HKCU\Software\Clients\StartMenuInternet\YName\Capabilities\URLAssociations
http=YNameURL
https=YNameURL
2) HKCU\Software\RegisteredApplications - 如上所述:
YName=软件\客户端\StartMenuInternet\YName\功能
3)HKCU\Software\Classes\YNameURL\shell\open\command
@=路径\Y名称.exe
4)HKCU\Software\Classes\Applications\YName.exe\shell\open\命令
@=路径\Y名称.exe