文件类型探测程序

本文配套源码

记得我以前写过一篇文章是关于如何从一个可执行程序中吸取图标。本文将讨论如何得到与特定的文件类型关联的文件图标?

这个问题依赖于你是想要得到一个指定文件的图标还是只想得到普通文件的图标。如果你有一个特定的文件,如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);


对话框中有一个编辑框,在这个编辑框中可以输入任何文件的扩展名如txt、jpg、bmp等来察看与相 应文件关联的图标。实现方法很直接:当用户敲入新的扩展名,Windows发送一个EN_UPDATE通知消息; 然后对话框调用SHGetFileInfo函数获得图标,接着将图标显示在一个静态图标控制上,详细的实现细节请参考本文附带的程序。

时间: 2024-09-18 23:01:50

文件类型探测程序的相关文章

好用的php程序编辑器(关键字带颜色,支持其他文件类型,如htm,java,c等)

程序|关键字 UltraEdit32加上一个wordfile(for php)很好用,wordfile其实是一个文本文件,其中设定了关键字.变量...的颜色,这样,php文件看起来很舒服.UltraEdit32和wordfile可以从www.ultraedit.com下载. wordfile的使用方法:1.在ultraedit中,选Advanced--Configuration--Syntax Highlighting,2.Full name path for 中选中wordfile3.重新启动

Windows 8开发入门(十八)windows 8开发模拟器和程序中关联文件类型

本文将讲解两个内容,1.Windows 8 开发模拟器的使用.2.程序中设置关联文件类型. 一. Windows 8 开发模拟器的使用 1.在VS2012中自带有Windows 8开发模拟器,我们选择VS界面中的调试按 钮从"本地计算器"改选为"Simulater"模拟器即可,如下图: 2.点击"Simulator"按钮即可弹出以下界面 3.此时我们可以看到模拟器上面有很多按钮这些按钮的功能有模拟单点触摸.多点触摸.旋转设备等操作 .我们在这里可

如何在Windows8中设置使用某一程序打开某一文件类型

  1.在需要修改默认程序的文件上点击鼠标右键,将鼠标移动到弹出菜单中的"打开方式(H)",然后在右侧列表中找到所需要的程序并点击,即可使用该程序打开该文件类型的文件.如下图所示: 2.上述步骤仅作为单次需要打开,如果需要将某程序设置为默认打开该类型文件,或者系统未识别出对应的程序,我们可以按照下图所示点击"选择默认程序(C)-". 3.在弹出的对话框中,务必勾选中"所有.pdf文件都用这个应用打开",再点击列表中的程序如"Window

ls -l文件类型

ls -l文件类型[转] Linux文件类型常见的有:普通文件(-).目录(d).字符设备文件(c).块设备文件(b).符号链接文件(l)等:需要注意的是,Linux文件类型和Linux文件的文件名所代表的意义是两个不同的概念.我们通过一般应用程序而创建的比如file.txt.file.tar.gz ,这些文件虽然要用不同的程序来打开,但放在Linux文件类型中衡量的话,大多是常规文件(也被称为普通文件). 1 普通文件 [root@localhost ~]# ls -lh install.lo

.NET中复杂的文件类型

当你浏览一个工程目录时,总会感觉到.NET Framework的文件类型有点扑朔迷离.本文将让你对.NET和Visual Studio .NET的不同文件及其扩展有更深入的了解. 当你访问公共站点时看到URL中熟悉的文件扩展时,你一定立即认出该站点开发所使用的工具.虽然HTML是因特网的标准,然而你会经常碰到.asp并奇怪为何开发者使用这一古老的技术.如果你发现.aspx,你一定猜想程序员开发时使用的ASP.NET版本号. 最近与一位.NET开发人员的交流中让我想到,.NET与Visual St

php文件类型对照表

  php文件类型对照表!很方便看出文件是什么类型.如gif是image/gif类型 ie id 后缀名 php识别出的文件类型 0 gif image/gif 1 jpg image/jpeg 2 png image/png 3 bmp image/bmp 4 psd application/octet-stream 5 ico image/x-icon 6 rar application/octet-stream 7 zip application/zip 8 7z application/

图片、文件防盗链程序

程序|防盗链     关于图片盗链这个问题,毕竟是自己的劳动成功,很多人不希望别人就那么轻易地偷走了. 这个功能在很多的论坛上都具有,可能是因为盗链的行为太多了吧    反盗链的程序其实很简单,熟悉ASP.NET 应用程序生命周期的话很容易就可以写一个,运用HttpModule在BeginRequest事件中拦截请求就ok了,剩下的工作就是过滤,再过滤!    如果不熟悉HttpModule的话,可以去MSDN上查阅,介绍非常详细,地址:ms-help://MS.VSCC.v80/MS.MSDN

Response.ContentType 控制输出文件类型(讨论下载文件问题)

response|控制|问题|下载 服务器送给客户端的数据包类型可以是text/html文本,也可以是gif/jpeg图形文件,所以每次传输前,我们都必须告知客户端将要传输的文件类型,一般默认情况下为"Text/Html"类型.<% Response.ContentType = "text/HTML" %><% Response.ContentType = "image/GIF" %><% Response.Cont

ASP.NET文件上传程序的源代码

asp.net|程序|上传|源代码 本文件用VB.NET编辑,在WIN2000+IIS(安装有.NET支持)中调试通过,可以上传许多常用的文件类型.如RAR.ZIP.DOC.TXT.JPG.GIF等等!直接下载保存为ASPX格式就可以------------------------------------------------------------<html><title>文件上传</title> <body><form enctype="