在代码中调用程序版本信息 【C++ Builder下例子】


我们有可能需要在代码中调用文件的版本信息, 
例如, 产品名称, 文件版本, 公司名称, 版权信息等等.

以下在C++ Builder下用API 编程实现了程序版本信息的调用。

 

struct TTranslate { WORD wLanguage; WORD wCodepage; }; void __fastcall TAboutBox::FormCreate(TObject *Sender) { DWORD dwHandle; DWORD size = GetFileVersionInfoSize(Application->ExeName.c_str(), &dwHandle); if(size == 0) return; char* lpData = new char[size + 1]; GetFileVersionInfo(Application->ExeName.c_str(), 0, size, lpData); // 取得语言与代码页信息 char* buff; TTranslate* ts = new TTranslate(); UINT uLen; BOOL rc; rc = VerQueryValue(lpData, "//VarFileInfo//Translation", (void**)&ts, &uLen); if(rc == FALSE) { ShowMessage("不存在!"); return; } AnsiString sLang = IntToHex(ts->wLanguage, 4); AnsiString sCodePage = IntToHex(ts->wCodepage, 4); delete ts; AnsiString prefix = "//StringFileInfo//" + sLang + sCodePage + "//"; // ProductName rc = VerQueryValue(lpData, (prefix + "ProductName").c_str(), (void**)&buff, &uLen); if(rc == FALSE) { ShowMessage("不存在!"); } if(uLen > 0) { ProductName->Caption = StrPas(buff); } // FileVersion rc = VerQueryValue(lpData, (prefix + "FileVersion").c_str(), (void**)&buff, &uLen); if(rc == FALSE) { ShowMessage("不存在!"); } if(uLen > 0) { Version->Caption = "版本: " + StrPas(buff); } rc = VerQueryValue(lpData, (prefix + "CompanyName").c_str(), (void**)&buff, &uLen); if(rc == FALSE) { ShowMessage("不存在!"); } if(uLen > 0) { CompanyName->Caption = StrPas(buff); } rc = VerQueryValue(lpData, (prefix + "LegalCopyright").c_str(), (void**)&buff, &uLen); if(rc == FALSE) { ShowMessage("不存在!"); } if(uLen > 0) { Copyright->Caption = StrPas(buff); } rc = VerQueryValue(lpData, (prefix + "Comments").c_str(), (void**)&buff, &uLen); if(rc == FALSE) { ShowMessage("不存在!"); } if(uLen > 0) { Comments->Caption = StrPas(buff); } delete[] lpData; } //--------------------------------------------------------------------------- 

你可能感兴趣的:(在代码中调用程序版本信息 【C++ Builder下例子】)