免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 4231|回复: 1
收起左侧

[技巧] 通过注册表修改 文件类型的图标的方法

[复制链接]

478

主题

2万

铜板

146

好友

版主

地信是我家,发展靠大家!

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
12010
发表于 2010-5-3 23:36 | 显示全部楼层 |阅读模式
【实现目标】 修改普通文件类型的图标。
【操作方法】 Windows中每种文件类型都有自己的图标。我们可以将某种文件类型的图标修改为自己喜欢的图标,具体操作如下:(1)从Windows目录下删除ShellIconCache文件。(2)运行regedit.exe,打开注册表编辑器。(3)展开HKEY_CLASSES_ROOT\.ext分支。(ext为欲修改的文件的扩展名)(4)在该分支中查找与.ext文件相关的程序数据名。(如与.bat文件相关的程序数据名为“batfile”)(5)展开HKEY_CLASSES_ROOT\batfile\DefaultIcon(分支。“batfile”为上一步找出的程序数据名)。(6)将DefaultIcon的缺省数据修改为新图标所在的位置即可。
锄禾日当午,签到好辛苦!...

643

主题

8万

铜板

72

好友

地信贵宾

http://bbs.3s001.com/

Rank: 13Rank: 13Rank: 13Rank: 13

积分
17120
发表于 2010-5-3 23:43 | 显示全部楼层
得我以前写过一篇文章是关于如何从一个可执行程序中吸取图标。本文将讨论如何得到与特定的文件类型关联的文件图标?
    这个问题依赖于你是想要得到一个指定文件的图标还是只想得到普通文件的图标。如果你有一个特定的文件,如C:\\MyFile\\SomeFile.zzp。那你可以调用ExtractAssociatedIcon函数获得于特定文件关联的图标。但这个函数只适用于磁盘上存在实际的文件(或某处可存取)。
    如果你想查找与一般文件类型关联的图标,那你就必须读注册表。例如,为了查找出.cpp文件使用的图标,你就要察看注册表的HKEY_CLASSES_ROOT\\.cpp入口,在我的机器上,其第一行的值是“cppfile”,然后继续察看HKEY_CLASSES_ROOT\\cppfile的DefaultIcon键值,在我的机器上是:

HKEY_CLASSES_ROOT\\cppfile\\DefaultIcon =
"C:\\PROGRA~1\\MICROS~4\\Common\\MSDev98\\Bin\\msdev.exe,-20209"

    所以.cpp文件的图标在C:\\PROGRA~1\\MICROS~4\\Common\\MSDev98\\Bin\\msdev.exe文件中的图标资源ID号为20209。一般情况下,HKCR\\.foo有一个类似foofile的入口值,并在HKCR \\foofile\\DefaultIcon中指定了cpp文件的图标。
    但是,有的时候.foo的入口值不是foofile,而是象“SuperApp.Document.5”,它的意思是SuperApp文档的第五个版本,在HKEY_CLASSES_ROOT\\ SuperApp.Document.5中没有DefaultIcon键值,但有键值CLSID={又长又丑的十六进制GUID},这就告诉你.foo是COM对象,其类的ID值就是那又长又丑的十六进制GUID。要得到关联的图标,必须到\\CLSID\\{又长又丑的十六进制GUID}\\ DefaultIcon查找。哭吧!太痛苦了。但是还没完呢!因为foofile还可能有一个定制的以外壳扩展形式实现的图标处理器。为此你还要检查一下,加载这个图标处理器,调用IShellIcon或者IExtractIcon 并且继续哭吧,这真是太荒唐啦!
    所幸的是,有一个更好的方法来避开令人厌恶的注册表,那就是使用SHGetFileInfo函数,调用这个函数可以获得所有关于文件的信息。它有一个聪明的选项,SHGFI_USEFILEATTRIBUTES,这个选项允许你传递一个假文件名,如mumble.txt。即便文件不存在,SHGetFileInfo也能获得你要的信息。

SHFILEINFO shfi;
memset(&shfi,0,sizeof(shfi));
SHGetFileInfo("foo.bmp",
FILE_ATTRIBUTE_NORMAL,
&shfi, sizeof(shfi),
SHGFI_ICON|SHGFI_USEFILEATTRIBUTES);

为了展示它的使用方法,我写了一个小应用程序,FileType(参见图一),
cfig110001.jpg
图一
    对话框中有一个编辑框,在这个编辑框中可以输入任何文件的扩展名如txt、jpg、bmp等来察看与相应文件关联的图标。实现方法很直接:当用户敲入新的扩展名,Windows发送一个EN_UPDATE通知消息;然后对话框调用SHGetFileInfo函数获得图标,接着将图标显示在一个静态图标控制上,


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/glince/archive/2008/03/26/2219178.aspx
该会员没有填写今日想说内容.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表