我們在許多情況下,(如編制安裝程序時),需要獲得應用程序的版本信息,以決定是否更新文件。最簡單的辦法是比較文件的生成日期。其實,對於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可以得到文件的公司名稱,文件描述,內部名稱,合法版權,原始文件名,產品名稱,產品版本等一系列信息.