最近在做一个关于应用程序和文件图标的工具,过程中需要了解windows如何给文件选择展示图标和默认打开方式的问题,各种论坛上有关资料查了很多,但是自己一旦尝试过后就会发现所讲的都很表面,不能代表windows真正的处理逻辑。
1、用户自定义后缀的文件,让windows针对它显示自定义图标。
需要自己编码:在注册表HKEY_CLASSES_ROOT下新建一个 ".myext"的项,myext是自定义的后缀名,然后其数据中修改值为一个自定义名称(比如myexe,一般为自己那个应用程序名称好识别),然后再在HKEY_CLASSES_ROOT下新建这个名称的项"myexe",在下面新建DefaultIcon项,数据值那里,填入含有这个图标的exe或者dll的路径,用逗号隔开,后面是图标资源在exe/dll的资源组中的编号(这个如果自己写的exe/dll肯定自己知道,如果是别人写的exe/dll,可用resourcehacker等可执行文件浏览工具查看图标的资源组编号),这样就windows就可以找到这个文件默认显示的图标位置了。如果图标是.icon文件,可以直接把icon文件路径填进去就不用像exe那样加资源组编号了。
2、用户自定义后缀的文件,让windows针对它使用自定义应用程序打开。
这个和上面基本一样,注意上面defaulticon项同级有个shell项,这个里面就是打开方式的信息。我们可以在defaulticon同级自己建立一个shell项,下面新建一个open项,下面再一个command项,这个项数据值那里填入启动它的exe的路径,后面空格接启动参数,"%1"会被替换成被双击的文件的路径。
3、当前用户显示自定义图标和打开方式。
上面1和2说了在所有账户注册表中如此修改,这种情况下所有用户都可以看到这个图标和拥有这个打开方式。如果想仅仅本账户可以享有这种特效,可以把上述修改的位置挪到HKEY_CURRENT_USER中去设置,对应的defaulticon和shell位置在HKEY_CURRENT_USER/software/classes下,其余操作完全一样。
4、windows如何确定某个文件用什么方式打开。
windows除了根据上面两个路径去找到文件启动的exe,还会到下面路径去寻找打开方式:HKEY_CURRENT_USER\software\microsoft\windows\explore\fileexts,一开就知道这是关于资源管理器里文件后缀名的信息,这个里面如果找到userchoice项,其键里progid名称的项如果有键值,就和前面一样,分别到HKEY_CURRENT_USER和HKEY_CLASSES_ROOT两个大路径(主键)对应的位置中去找是否可以找到打开的方式,有的话依然可以打开这个文件。
现在我们可以尝试,对于一个.mp3文件,在三个位置都删除了注册信息,windows就会打不开。而只要有一个位置有正确描述了打开方式的注册表信息,都可以找到对应的exe打开它。我们常遇到的浏览器被设为默认浏览器,毫无疑问就是修改注册表这个位置。
觉得有益的朋友可以给我双击点赞666 :) :)