获取Exe文件版本信息的函数(拷贝收藏)

Type   TFileVersionInfo   =   Record  
      FixedInfo:TVSFixedFileInfo;         {版本信息}  
      CompanyName:String;                         { 公司 名称}  
      FileDescription:String;                 {说明}  
      FileVersion:String;                         {文件版本}  
      InternalName:String;                       {内部名称}  
      LegalCopyright:String;                   {版权}  
      LegalTrademarks:String;                 {合法商标}  
      OriginalFilename:String;               {源文件名}  
      ProductName:String;                         {产品名称}  
      ProductVersion:String;                   {产品版本}  
      Comments:String;                               {备注}  
      LocalPort:String;                             {Local   UDP_Message   Port}  
  end;  
   
   
  Function   GetFileVerInfo(ExeFileName   :Pchar;var   VerSionInfo:TFileVersionInfo):Boolean;  
  var  
      dwHandle,   dwVersionSize       :   DWORD;  
      Find                                             :   String;  
      pcBuffer                                     :   PChar;  
      pTemp                                           :   Pointer;  
      FileVersionInfo                       :   TVSFixedFileInfo;  
  begin  
      Find   :=   '/';  
      dwVersionSize   :=   GetFileVersionInfoSize(   PChar(ExeFilename),dwHandle   );  
      if   dwVersionSize   =   0   then     begin  
          Result:=False;  
          Exit;  
      end;  
      GetMem(   pcBuffer,   dwVersionSize   );  
      if   not   GetFileVersionInfo(   PChar(ExeFilename),dwHandle,dwVersionSize,pcBuffer   )   then   begin  
          FreeMem(pcBuffer);  
          Result:=False;  
          Exit;  
      end;  
      if   not   VerQueryValue(   pcBuffer,PChar(Find),pTemp,dwVersionSize   )   then   begin  
          FreeMem(pcBuffer);  
          Result:=False;  
          Exit;  
      end;  
      FileVersionInfo:=PVSFixedFileInfo(pTemp)^;  
      With   FileVersionInfo   do   begin  
          VersionInfo.FixedInfo.dwSignature:=dwSignature;  
          VersionInfo.FixedInfo.dwStrucVersion:=dwStrucVersion;  
          VersionInfo.FixedInfo.dwFileVersionMS:=dwFileVersionMS;  
          VersionInfo.FixedInfo.dwFileVersionLS:=dwFileVersionLS;  
          VersionInfo.FixedInfo.dwProductVersionMS:=dwProductVersionMS;  
          VersionInfo.FixedInfo.dwProductVersionLS:=dwProductVersionLS;  
          VersionInfo.FixedInfo.dwFileFlagsMask:=FileVersionInfo.dwFileFlagsMask;  
          VersionInfo.FixedInfo.dwFileFlags:=fileVersionInfo.dwFileFlags;  
          VersionInfo.FixedInfo.dwFileOS:=FileVersionInfo.dwFileOS;  
          VersionInfo.FixedInfo.dwFileType:=FileVersionInfo.dwFileType;  
          VersionInfo.FixedInfo.dwFileSubtype:=FileVersionInfo.dwFileSubtype;  
          VersionInfo.FixedInfo.dwFileDateMS:=FileVersionInfo.dwFileDateMS;  
          VersionInfo.FixedInfo.dwFileDateLS:=FileVersionInfo.dwFileDateLS;  
      end;  
      Find   :=   '/StringFileInfo/080403A8/';  
      if   VerQueryValue(   pcBuffer,PChar(Find+'CompanyName'),pTemp,dwVersionSize   )   then  
          VersionInfo.CompanyName:=PChar(pTemp)  
      else   begin  
          Find   :=   '/StringFileInfo/040904E4/';  
          if   VerQueryValue(   pcBuffer,PChar(Find+'CompanyName'),pTemp,dwVersionSize   )   then  
              VersionInfo.CompanyName:=PChar(pTemp)  
          else   begin  
              Result:=False;  
              Exit;  
          end;  
      end;  
      if   VerQueryValue(   pcBuffer,PChar(Find+'FileDescription'),pTemp,dwVersionSize   )   then  
          VersionInfo.FileDescription:=PChar(pTemp);  
   
      if   VerQueryValue(   pcBuffer,PChar(Find+'FileVersion'),pTemp,dwVersionSize   )   then  
          VersionInfo.FileVersion:=PChar(pTemp);  
   
      if   VerQueryValue(   pcBuffer,PChar(Find+'InternalName'),pTemp,dwVersionSize   )   then  
          VersionInfo.InternalName:=PChar(pTemp);  
   
      if   VerQueryValue(   pcBuffer,PChar(Find+'LegalCopyright'),pTemp,dwVersionSize   )   then  
          VersionInfo.LegalCopyright:=PChar(pTemp);  
   
      if   VerQueryValue(   pcBuffer,PChar(Find+'LegalTrademarks'),pTemp,dwVersionSize   )   then  
          VersionInfo.LegalTrademarks:=PChar(pTemp);  
   
      if   VerQueryValue(   pcBuffer,PChar(Find+'OriginalFilename'),pTemp,dwVersionSize   )   then  
          VersionInfo.OriginalFilename:=PChar(pTemp);  
   
      if   VerQueryValue(   pcBuffer,PChar(Find+'ProductName'),pTemp,dwVersionSize   )   then  
          VersionInfo.ProductName:=PChar(pTemp);  
   
      if   VerQueryValue(   pcBuffer,PChar(Find+'ProductVersion'),pTemp,dwVersionSize   )   then  
          VersionInfo.ProductVersion:=PChar(pTemp);  
   
      if   VerQueryValue(   pcBuffer,PChar(Find+'Comments'),pTemp,dwVersionSize   )   then  
          VersionInfo.Comments:=PChar(pTemp);  
      if   VerQueryValue(   pcBuffer,PChar(Find+'LocalPort'),pTemp,dwVersionSize   )   then  
          VersionInfo.LocalPort:=PChar(pTemp)  
      else  
          VersionInfo.LocalPort:='66500';  
      FreeMem(pcBuffer   );  
      Result:=True;  
  end;   
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值