之前写过一次有关文件关联的帖子了,只是可恨的WLW竟然半道出问题,害的我辛辛苦苦写的东西就这样一转眼就没了,唉~
重新来吧 :-)
在Windows下,文件关联的操作主要是通过注册表来实现的。注册表在Windows里被应用到极致,几乎所有的系统相关的东西在注册表里都可以找到身影~
今天,就来简单看一下如何利用注册表来达到文件关联的目的。
打开注册表编辑器(开始-->运行-->regedit),并展开HKEY_CLASSES_ROOT,可以看到下面的景象:
windows系统下所有文件类型都会在这里进行注册,HKEY_CLASSES_ROOT分支,也就成了所有文件的集合地。在HKEY_CLASSES_ROOT下,可以看到许多以“.xxx”命名的分支,这些分支就代表了一系列的扩展名。比如,我们找一个.txt扩展名:
可以看到,.txt类型的文件,在注册表中对应了HKEY_CLASSES_ROOT下的名为“.txt”的分支。那么,这个类型的文件的关联程序是在哪里呢?或许,你在.txt分支下挖地三尺也没看到有关联程序的身影,那它到底是怎么找到.txt文件的管理程序呢?
看这里:
.txt分支的值,是字符串类型的,这里,在我的电脑上,这个字符串是叫做“UltraEdit.txt”。事实上,windows在找到.txt分支之后,就会查找这个值,并根据这个值所定义的程序的“名称”来查找它的关联程序到底是什么。
拿到.txt的值之后,我们可以接着在HKEY_CLASSES_ROOT分支里向下找,找跟这个值同名的分支:
在UltraEdit.txt分支下,可以看到shell\open\command的分支结构,command分支,就代表了名为“UltraEdit.txt”的应用程序的真正路径。看上图的右边,command的值即是UltraEdit这个工具的可执行文件的路径。
至此,大致上可以看出windows下实现文件关联的原理。如果希望为一个系统原来没有的文件类型注册一个关联程序,那么,正确的方法是:
(当然是在文件夹选项里新建,呵呵 ^o^ 这是最快速的方法)
不过,因为我们这里讨论的方法将来需要应用MFC来实现,所以,还是要看比较繁琐的实现步骤(为.xxx类型的文件建立指向程序xxxxxxxx的关联):
1、在HKEY_CLASSES_ROOT下建立.xxx分支;
2、设定.xxx分支的值为xxxx(这个名称自已定,不过,不要与现有的重复,一般可以选择能够代表文件类型或关联程序的名字)
3、在HKEY_CLASSES_ROOT下建立xxxx分支(名称与.xxx分支的值相同)
4、在xxxx分支下依次创建分支,完成这样的结构:\HKEY_CLASSES_ROOT\xxxx\shell\open\command
5、修改command分支的值,以需要关联的程序的完整路径作为它的值
OK~
在Windows下实现文件关联就介绍这么多了~有关利用MFC实现的方法,见我另外的一个文章。