网站已经改版为Wordpress版本,这里是旧版本的快照,请不要在页面中留言.

小悠PE文件FileVersionInfo类,轻松获取PE文件版本信息


本文出自悠然品鉴小悠,转载请注明出处:http://www.youranshare.com/codeorg/sid/138.html

今天在整一个类似于windows任务管理器的东西,其中一个功能就是需要获取到exe,dll这些PE文件的版本信息和描述信息,小悠整了老半天终于还是整出来了,为了以后使用放便,我就做成了一个类给封装了起来,这里给大家分享一下吧.

        

         我封装的这个类叫做CPEFileVersionInfoHelper,这里我说明一下这个类的核心实际上是封装了GetFileVersionInfoSizeA、GetFileVersionInfoA和VerQueryValueA这三个函数,具体这三个函数是干嘛的有兴趣的同学可以去MSDN看一下,小悠这里就不在多说了,下面我将会说明我封装的这个类的用法:

如下图所示,是类CPEFileVersionInfoHelper类的定义:

                                             

其中函数GetPEFileVersionInfo是类的接口,你只需要传入对应的PE文件的位置和用于接收PE文件Version信息的PEFILEVERSION_INFO (这货是我定义的一个std::map)就能获取到你想要的PE文件的Version信息.

 

定义了4种状态返回值,作为函数GetPEFileVersionInfo的返回值.

#define READ_SUCCESS        0x00//获取成功
#define READ_ERROR            0x01//获取失败
#define READ_INVALID_INIT 0x02//错误的初始化导致的,失败
#define READ_HEAP_REEO   0x03//内部的new操作挂掉导致的


一个PE文件的Version信息有很多种,我列出了所有的类型

//需要获取的PE信息
#define Comments                     "Comments"
#define CompanyName                    "CompanyName"
#define FileDescription              "FileDescription"
#define FileVersion                     "FileVersion"
#define InternalName          "InternalName"
#define LegalCopyright             "LegalCopyright"
#define LegalTrademarks          "LegalTrademarks"
#define OriginalFilename    "OriginalFilename"
#define PrivateBuild             "PrivateBuild"
#define ProductName                "ProductName"
#define ProductVersion             "ProductVersion"
#define SpecialBuild            "SpecialBuild"


定义了用于保存PE 文件Version信息的map<string,string>,其中map的key表示Version信息的索引,例如: map[“FileDescription”] 存放了描述信息.

 

定义一个宏用于添加map的key值,你需要获取什么Version信息你就调用这个宏添加,例如       P_B(peinfo,FileDescription);  P_B(peinfo,FileVersion);表示你要查询 “FileDescription”和”FileVersion “ 查询的结果将会放到peinfo中去

 

 

还有一个定义,就是一下子添加所有的查询= =

 

下面我将演示一下如何使用这个类:

   我想获取到C:\Windows\System32\calc.exe这个文件的所有信息:


执行上面的代码我们可以得到下面的结果:

   我想获取C:\Windows\System32\regedt32.exe这个文件的部分信息.

       运行上面的代码可以得到下面的结果:

 

 

总的来说,通过小悠写的这个CPEFileVersionInfoHelper类,你可以很轻松的获取到exe、dll这些PE文件的 版权信息、作者信息、文件说明、商标信息

 

下面附上小悠的这个CPEFileVersionInfoHelper类的VC6.0的示例工程下载地址:

解压密码 yscode

百度网盘下载地址:http://pan.baidu.com/s/1qW6r2bi


       


  • 标签:
  • exe文件信息获取
  • exe描述信息获取
  • FileVersion
网站已经改版为Wordpress版本,这里是旧版本的快照,请不要在页面中留言.