Win10下用程序设置默认浏览器
Windows 10下的默认浏览器设置,一般是通过控制面板来设置,且默认成Windows自己的IE, EDGE,而市面上那么多浏览器,不能象以前一样直接写个注册表就成为系统默认浏览器了,一方面是微软想保证系统安全,另一方面是不是在利用自己的平台优势让用户用自家的浏览器?而市面上那么多浏览器如FireFox, Safari,Chrome,还有众多的国内浏览器,怎么让自己成为系统的默认浏览器呢?
其实像FireFox,Chrome都是开源的,应该都涉及设置默认浏览器的代码,有兴趣的可以去看看。这里科普一下微软在Windows 10下设置默认浏览器的规则,核心就是处理Windows文件关联对应的UserChoice注册表键,不过微软用了点算法,必须正确才能生效。
这个算法包含5个核心元素:
- 文件扩展名,如".txt"
- SID,即Windows系统当前用户的SID(类似"S-1-5-21-463486358-3398762107-1964875780-1001")
- ProgID,是文件关联所对应的程序识别ID,如"txtfile"
- 注册时间,按100纳秒计,精确到设置时的分钟数
- 一个神秘字符串,到当前Windows11为止一直是"User Choice set via Windows User Experience {D18B6DD5-6124-4341-9318-804003BAFA0B}"
只要在UserChoice下建一个名为Hash的值,并把上面核心元素按如下算法计算出一个字符串值写入(无此值则设置不生效):
hash = Base64(MicrosoftHash(MD5(toLower(extension, sid, progid, regdate, experience))))
下面看一下正常设置的例子:
Windows对.htm的文件默认关联为edge浏览器