文件类型探测程序

来源:互联网 发布:淘宝手机助手登陆不了 编辑:程序博客网 时间:2024/05/01 19:42
文件类型探测程序本文例子程序    记得我以前写过一篇文章是关于如何从一个可执行程序中吸取图标。本文将讨论如何得到与特定的文件类型关联的文件图标?
    这个问题依赖于你是想要得到一个指定文件的图标还是只想得到普通文件的图标。如果你有一个特定的文件,如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(参见图一),图一    对话框中有一个编辑框,在这个编辑框中可以输入任何文件的扩展名如txt、jpg、bmp等来察看与相应文件关联的图标。实现方法很直接:当用户敲入新的扩展名,Windows发送一个EN_UPDATE通知消息;然后对话框调用SHGetFileInfo函数获得图标,接着将图标显示在一个静态图标控制上,详细的实现细节请参考本文附带的程序。
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 皮肤旧伤黑色斑怎么办 小米5c网络不好怎么办 小米去5c卡怎么办 戴尔游匣5577开机黑屏怎么办 三星s6的通知栏拉不下来怎么办 电脑记住密码打不开了怎么办 联想手机升级系统失败了怎么办 日本语言学校申请研究生签证怎么办 在埃塞俄比亚签证过期了怎么办 看完的小说想要卖掉该怎么办 在俄罗斯脸干了痛怎么办 苹果手表电池放亏了怎么办 平板电脑电池不耐用怎么办 计算机电池放入后没反应怎么办 笔记本电脑玩游戏花屏怎么办 笔记本玩游戏花屏怎么办 笔记本电脑充电插口坏了怎么办 车蓄电池没电了怎么办 汤浅q85电瓶亏电怎么办 富士康自离行李怎么办 微店红酒食品认证怎么办 yy频道提示禁止游客进入怎么办 口红颜色太艳了怎么办 我在菲律宾想走怎么办 当国家流通货币不够用怎么办 苹果5s账号密码忘记怎么办 钢铁雄心3补给不足怎么办 灯外观颜色太难看了怎么办 被移民公司骗了怎么办 文明5大包锁区怎么办 鸭子被黄鼠狼叼走了怎么办 黄鼠狼再店了拉屎怎么办 我只有信用卡但是又想去嫖怎么办 瑞士退税单掉了怎么办 装了新风噪音大怎么办 意大利 护照被偷了怎么办 请问去意大利要怎么办护照 在意大利护照丢了怎么办 考研二战档案打回原籍怎么办 脸上的肉往下掉怎么办 眼镜带了往下掉怎么办