得到文件的版本信息
我们在很多环境下,(如体例安装措施时),需要得到应用措施的版本信息,以抉择是否更新文件。最简朴的步伐是较量文件的生成日期。其实,对付EXE、DLL、OCX等范例的文件有越发精确的要领得到文件的版本信息。操作API函数GetFileVersionInfo,GetFileVersionInfoSize,VerQueryValue,我们可以很利便地得到文件的一系列信息。
以下利用C++ Builder 4为例演示详细的操纵:
首先,成立一个新项目,在主窗口上安排一个Edit控件,一个Button控件。
然后,在Button的点击事件中插手如下代码:
void __fastcall TForm1::
Button1Click(TObject *Sender)
{
//首先得到版本信息资源的长度
DWORD dwHandle,InfoSize;
InfoSize = GetFileVersionInfoSize(Edit1- >Text.c_str(),&dwHandle);
//将版本信息资源读入缓冲区
char *InfoBuf = new char[InfoSize];
GetFileVersionInfo(Edit1->Text.c_str(),0,InfoSize,InfoBuf);
//得到生成文件利用的代码页及字符集信息
char *pInfoVal;
unsigned int dwInfoValSize;
VerQueryValue(InfoBuf,"\\VarFileInfo\\Translation",&((void *)pInfoVal), &dwInfoValSize);
AnsiString V="\\StringFileInfo\\"+IntToHex(*((unsigned short int *)
pInfoVal),4)+IntToHex(*((unsigned short int *) &pInfoVal[2]),4)
+"\\FileVersion";
//得到详细的版本号
VerQueryValue(InfoBuf, V.c_str(),&((void *)pInfoVal),&dwInfoValSize);
Edit1->Text = AnsiString(pInfoVal).SetLength(dwInfoValSize-1);
delete InfoBuf;
}
以上,仅示范如何得到文件版本。别离替换FileVersion为CompanyName,FileDescription,InternalName,LegalCopyright,OriginalFilename,ProductName,ProductVersion可以获得文件的公司名称,文件描写,内部名称,正当版权,原始文件名,产物名称,产物版本等一系列信息.