开头放一个微软关于默认应用的注册表文档
https://docs.microsoft.com/en-us/windows/win32/shell/default-programs
先规定一下名词
项 也就是路径中一个节点的名字,跟文件夹与子文件夹差不多,项有子项,类比的话就是有子文件夹
例如下面这个路径
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\RegisteredApplications
项分别是下面这四个
计算机
HKEY_LOCAL_MACHINE
SOFTWARE
RegisteredApplications
值 可以类比成是文件夹下的文件
数据 按照类比的话就是文件中的内容
Windows默认应用大体上有如下注册表关系
首先假如一个程序想要注册成为默认浏览器的候选者,那么他要先在一个特定注册表项下添加一个值和一个值所关联的数据,值应该是任意的,但是值关联的数据则是一个注册表路径,指向另外一个注册表项
而在这个另外的注册表项中包含具体的信息,用来告诉操作系统他想要注册为默认浏览器,当然也可以是默认播放器
该项的子项中存在一些值和关联的数据,值是该应用可以打开的类型(图片,视频,URI),数据则又是另一个注册表路径,用来描述如何打开该类型的东西(里面就有应用Exe的路径)
我们的目的就是修改Chrome如何打开HTTPS与HTTP协议的描述
我们知道Chrome有一个命令行参数用来启动无痕模式
-incognito
所以我们要在注册表中找到一个可以输入启动参数的位置,把上面的参数加进去
首先你的Chrome必须是默认浏览器,或者说已经注册为默认浏览器的候选人,这样的话才有注册表项,否则找不到,假如不是默认浏览器但是只是候选人则没有作用
根据文档
注册为默认应用的程序都在这两个注册表路径下有值
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\RegisteredApplications
计算机\HKEY_CURRENT_USER\SOFTWARE\RegisteredApplications
第一个是影响全局的,我的Chrome默认单用户安装所以这个里面没有,但是有火狐和Edge和IE以及其他应用
第二个是当前用户的,我的Chrome就在这个下面
我们看该注册表项下这些值与关联的数据,比如我的这个,它是一个路径,指向另一个注册表项,来告诉操作系统它注册的是什么东西,是默认播放器还是默认图片查看器还是默认WEB浏览器
所以我们找到这个项,根据上下文根路径可能不同,我的是在当前用户根下
查看他的子项,在它的 URLAssociations 这个子项下面存在 https http 这些值与对应的数据,数据是另外的项的名字我们可以直接搜这个名字
搜索可以选择仅项然后全字匹配
在搜到的项的子项 shell > open > command 下面 我们找到了想要的东西
我们只需要在该项的默认值的数据中添加一个命令行参数就大功告成了, 最后面的 %1 则是一个占位符会被替换为你点开的那个URI, 你完全可以把exe的路径替换成别的程序的路径