前言:
我的电脑安装了三款可以查看 pdf 的软件, 分别是 Foxit Reader,WPS 和 2345 看图王, 平时我最惯用的 Foxit Reader(这就是个 PDF 阅读器, 我不用它看 PDF 还下他干嘛 - -), 但是在平时的使用过程中, 发现 2345 看图王很不老实, 隔几天就自动把自己设为默认的 PDF 打开方式, 每次这样我都要去 win10 的设置里手动更改打开方式, 后来觉得很麻烦, 就去查了一下默认打开方式在注册表中的存储原理, 从根本上解决这个问题.
另外, WPS 也不太老实, 每次更新完之后也会把自己设为默认的 PDF 查看器, 不过还是比 2345 看图王这种隔几天就自查一下的要强很多.
原理:
(不想看的可以直接看下面的方法部分)
Windows10 中对于某种扩展名的文件的默认的打开方式是这样存储的.
1. 在 HKEY_CLASSES_ROOT \ 中直接存储以扩展名为项名的项.
以我要找的 pdf 为例, 该项为
HKEY_CLASSES_ROOT\.pdf
如下图所示
可以看到, 在这一项中, 存在一个名为 (默认) 的字符串值, 数据为 2345pic.pdf.
这个数据创建了一个映射, 将扩展名为 pdf 的文件映射为名为 2345pic.pdf 的文件, 这样的结果有两个:
一个是为 windos 下一步寻找具体的打开软件做基础;
二是提供了文件种类的名字. 具体的效果就是我们在资源管理器里查看 pdf 文件的时候, 下面灰色的种类名显示的不是 "PDF" 或 "PDF 文件", 而是 "看图王 PDF 文件", 如下图所示. 当然, 从 "2345pic.pdf" 到 "看图王 PDF 文件" 还有一层映射关系, 在这里我们暂且不关心, 我们关心的只是文件类型和打开方式的映射关系.
同样的原理, 如果我们将这个名为 "默认" 的字符串值更改为 KWPS.PDF.9, 那么图中的灰色字很可能就会显示为诸如 "WPSPDF 文件" 一类的名字.
那么有了这个文件类型名, windows 如何将它与实际显示的文件类型以及打开方式对应起来呢, 这就涉及到第二步.
2. 同样在 HKEY_CLASSES_ROOT \ 中存储一个名为某种文件类型名的项. 以 2345pic.pdf 为例:
\HKEY_CLASSES_ROOT\2345Pic.pdf
如下图所示:
这一项为 windows 提供下一级映射, 即文件类型名和在资源管理中显示的文件类型以及打开软件的映射.
在图中可以看到, 这一项中有一个名为 (默认) 的字符串值, 这个值的数据正是在资源管理器中显示的 pdf 文件的类型.
在这一项的目录下, 还有一个名为 DefaultIcon 的项, 顾名思义, 这一项中存储的是该类型文件的默认显示图标.
而我们最关心的东西在 2345pic.pdf/shell/open/command 这一项中.
如下图:
command 项中有一个名为 "(默认)" 的字符串值, 这个值的数据就是用于打开该类型文件的程序的地址. 在这个地方由于我已经改过了, 所以是我的 FoxitReader 的地址.
小结:
windows 对于某特定扩展名的文件, 先在 HKEY_CLASSES_ROOT \ 中寻找以扩展名为项名的项, 读取这一项的默认字符串值的数据作为文件类型名, 再在 HKEY_CLASSES_ROOT \ 中寻找以该文件类型名为项名的项, 从中读出该种文件的各种信息, 包括显示文件类型名, 图标, 打开程序等.
操作方法:
1. 按 Win+R 快捷键, 打开 "运行", 在其中输入 regedit, 打开注册表编辑器
(或者用 cmd 进入也可以, 基础操作见仁见智)
2. 找到
HKEY_CLASSES_ROOT\.pdf
3. 双击右边窗口中的(默认), 就是红色的 ab 图标右边的(默认).
4. 在弹出的窗口中将数值数据部分的内容复制(或者用脑子记下来), 然后关闭 "编辑字符串" 窗口.
5. 找到
HKEY_CLASSES_ROOT \ 刚刚复制的文字 \ shell\open\command
在本例中, 即为
HKEY_CLASSES_ROOT\2345Pic.pdf\shell\open\command
6. 双击右边窗口中的(默认), 和第 3 步相同, 将第一个双引号中的内容更改为你自己喜欢的程序的完整路径, 第二个引号即 "%1" 保留, 不要做任何更改. 两串引号中间有一个空格也要保留.
7. 单击 "确定", 然后按 F5 刷新注册表. 退出注册表, 现在再去打开 pdf 文件, 尽管此时文件的类型仍然显示为看图王 PDF 文件, 图标也是看图王的图标, 但是打开之后却是 FoxitReader. 成功!
进阶:
之后要做的事就是增加一个开机启动项, 让系统每次开机都重新将我们刚刚做的步骤再做一遍, 以防止注册表中的内容被软件再篡改回去, 这一部分内容网上已经有很多教程, 如下几篇文章可作为参考:
Windows 注册表的导入和导出
导入注册表不用提示确认的命令是什么?
Win10"启动" 文件夹在哪里?
另外, 将对这项所做的工作对 WPS 对应的项 KWPS.PDF.9 如法炮制, 以防止每次 WPS 更新后再次将自己设为 PDF 的默认软件. 同样将这个注册表项导出并添加到启动项中.
同理, 可用这种方法修改其他类型文件的默认打开方式.(前提是遇到了很不讲理的流氓软件, 但是又因为某些原因不想卸载的情况, 正常情况还是应该用 Windows 自带的设置去改.)
来源: http://www.jianshu.com/p/ec84aec25862