如何取得其它*.EXE和*.DLL文件的版本号

 

在uses 中增加   shellapi 这个单元文件;

//获取文件版本信息  
type  
   TFileInfo  =  packed  record  
       CommpanyName:  string;  
       FileDescription:  string;  
       FileVersion:  string;  
       InternalName:  string;  
       LegalCopyright:  string;  
       LegalTrademarks:  string;  
       OriginalFileName:  string;  
       ProductName:  string;  
       ProductVersion:  string;  
       Comments:  string;  
       VsFixedFileInfo:VS_FIXEDFILEINFO;  
       UserDefineValue:string;  
   end;  
 
function  GetFileVersionInfomation(const  FileName:  string;  var  info:  TFileInfo;UserDefine:string=''):  
   boolean;  
const  
   SFInfo=  '/StringFileInfo/';  
var  
   VersionInfo:  Pointer;  
   InfoSize:  DWORD;  
   InfoPointer:  Pointer;  
   Translation:  Pointer;  
   VersionValue:  string;  
   unused:  DWORD;  
begin  
   unused  :=  0;  
   Result  :=  False;  
   InfoSize  :=  GetFileVersionInfoSize(pchar(FileName),  unused);  
   if  InfoSize  >  0  then  
   begin  
       GetMem(VersionInfo,  InfoSize);  
       Result  :=  GetFileVersionInfo(pchar(FileName),  0,  InfoSize,  VersionInfo);  
       if  Result  then  
       begin  
           VerQueryValue(VersionInfo,  '/VarFileInfo/Translation',  Translation,  InfoSize);  
           VersionValue  :=  SFInfo  +  IntToHex(LoWord(Longint(Translation^)),  4)  +  
               IntToHex(HiWord(Longint(Translation^)),  4)  +  '/';  
           VerQueryValue(VersionInfo,  pchar(VersionValue  +  'CompanyName'),  InfoPointer,  InfoSize);  
           info.CommpanyName  :=  string(pchar(InfoPointer));  
           VerQueryValue(VersionInfo,  pchar(VersionValue  +  'FileDescription'),  InfoPointer,  InfoSize);  
           info.FileDescription  :=  string(pchar(InfoPointer));  
           VerQueryValue(VersionInfo,  pchar(VersionValue  +  'FileVersion'),  InfoPointer,  InfoSize);  
           info.FileVersion  :=  string(pchar(InfoPointer));  
           VerQueryValue(VersionInfo,  pchar(VersionValue  +  'InternalName'),  InfoPointer,  InfoSize);  
           info.InternalName  :=  string(pchar(InfoPointer));  
           VerQueryValue(VersionInfo,  pchar(VersionValue  +  'LegalCopyright'),  InfoPointer,  InfoSize);  
           info.LegalCopyright  :=  string(pchar(InfoPointer));  
           VerQueryValue(VersionInfo,  pchar(VersionValue  +  'LegalTrademarks'),  InfoPointer,  InfoSize);  
           info.LegalTrademarks  :=  string(pchar(InfoPointer));  
           VerQueryValue(VersionInfo,  pchar(VersionValue  +  'OriginalFileName'),  InfoPointer,  InfoSize);  
           info.OriginalFileName  :=  string(pchar(InfoPointer));  
           VerQueryValue(VersionInfo,  pchar(VersionValue  +  'ProductName'),  InfoPointer,  InfoSize);  
           info.ProductName  :=  string(pchar(InfoPointer));  
           VerQueryValue(VersionInfo,  pchar(VersionValue  +  'ProductVersion'),  InfoPointer,  InfoSize);  
           info.ProductVersion  :=  string(pchar(InfoPointer));  
           VerQueryValue(VersionInfo,  pchar(VersionValue  +  'Comments'),  InfoPointer,  InfoSize);  
           info.Comments  :=  string(pchar(InfoPointer));  
           if  VerQueryValue(VersionInfo,  '/',  InfoPointer,  InfoSize)  then  
               info.VsFixedFileInfo  :=  TVSFixedFileInfo(InfoPointer^);  
           if  UserDefine<>''  then  
           begin  
               if  VerQueryValue(VersionInfo,pchar(VersionValue+UserDefine),InfoPointer,InfoSize)  then  
                   info.UserDefineValue:=string(pchar(InfoPointer));  
           end;  
       end;  
       FreeMem(VersionInfo);  
   end;  
end;  
 
调用演示:  
 
procedure  TForm1.Button1Click(Sender:  TObject);  
var  
   info:  TFileInfo;  
begin  
   if  OpenDialog1.Execute  then  
   begin  
       if  GetFileVersionInfomation(opendialog1.FileName,  info,'WOW  Version')  then  
       begin  
           Listbox1.Items.Add(OpenDialog1.FileName);  
           ListBox1.Items.Add('Comments:'  +  info.Comments);  
           ListBox1.Items.Add('CommpanyName:'  +  info.CommpanyName);  
           ListBox1.Items.Add('FileDescription:'  +  info.FileDescription);  
           ListBox1.Items.Add('FileVersion:'  +  info.FileVersion);  
           ListBox1.Items.Add('InternalName:'  +  info.InternalName);  
           ListBox1.Items.Add('LegalCopyright:'  +  info.LegalCopyright);  
           ListBox1.Items.Add('LegalTrademarks:'  +  info.LegalTrademarks);  
           ListBox1.Items.Add('OriginalFileName:'  +  info.OriginalFileName);  
           ListBox1.Items.Add('ProductName:'  +  info.ProductName);  
           ListBox1.Items.Add('ProductVersion:'  +  info.ProductVersion);  
           ListBox1.Items.Add('UserDefineValue:'  +  info.UserDefineValue);  
           if  boolean(info.VsFixedFileInfo.dwFileFlags  and  vs_FF_Debug)  then  
             listbox1.Items.Add('Debug:True')  
             else  
             ListBox1.Items.Add('Debug:False');  
           ListBox1.Items.Add('');  
       end;  
   end;  
end;

 

//本文转自大富翁论坛。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值