文件类型探测程序

原创 2005年04月27日 09:40:00
文件类型探测程序
本文例子程序
    记得我以前写过一篇文章是关于如何从一个可执行程序中吸取图标。本文将讨论如何得到与特定的文件类型关联的文件图标?
    这个问题依赖于你是想要得到一个指定文件的图标还是只想得到普通文件的图标。如果你有一个特定的文件,如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函数获得图标,接着将图标显示在一个静态图标控制上,详细的实现细节请参考本文附带的程序

文件类型探测程序FileType.zip

  • 2009年10月17日 20:50
  • 77KB
  • 下载

Python 探测图片文件类型

Table of Contents 1. 探测图片类型1.1. python magic 1.2. imghdr 1.3. PIL.Image探测图片类型今天遇到一个小问题,如何探测图片的文件类型。总...

shell的逻辑运算符 探测文件类型 比较数值、字符串等

选项 表示意思 1. 关于档案与目录的侦测逻辑卷标! -f 常用!侦测『档案』是否存在 eg: if [ -f filename...

Android通过文件类型打开系统已有支持程序开启

转载请注明出处http://www.jianshu.com/p/b075ef5a9ff9 有任何问题可联系我:mychinalance@gmail.com 源码可以到github上查看如果...

实验四十二Windows Server 2012 RDS桌面虚拟化之十三RemoteApp应用程序部署到开始菜单和启用文件类型关联

实验四十二Windows Server 2012 RDS桌面虚拟化之十三RemoteApp应用程序部署到开始菜单和启用文件类型关联     远程桌面虚拟化技术中的虚拟桌面和Remoteapp程序...
  • kkfloat
  • kkfloat
  • 2013年05月15日 00:48
  • 4778

Linux 程序设计学习笔记----Linux下文件类型和属性管理

1.Linux文件类型和权限
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:文件类型探测程序
举报原因:
原因补充:

(最多只允许输入30个字)