Borland C++ Builder VCL FAQ - Получение версии файла
ОГЛАВЛЕНИЕ
Страница 84 из 96
Получение версии файла
Для получения версии файла в C++Builder воспользуйтесь следующим кодом:DWORD h;где AppName, Version, Company - имена компонентов TLabel, которые расположены на вашей форме, и которые отображают полученную информацию.
DWORD Size=GetFileVersionInfoSize(Application->ExeName.c_str(), &h);
if(Size==0)
return ;
char *buf;
buf=(char *)GlobalAlloc(GMEM_FIXED, Size);
if (GetFileVersionInfo(Application->ExeName.c_str(),h,Size,buf)!=0)
{
char *ValueBuf;
UINT Len;
VerQueryValue(buf, "\\VarFileInfo\\Translation", &(void *)ValueBuf,&Len);
if (Len>=4)
{
AnsiString CharSet=IntToHex((int )MAKELONG(*(int *)(ValueBuf+2),*(int *)ValueBuf), 8);
if (VerQueryValue(buf,AnsiString "\\StringFileInfo\\"+CharSet+"\\ProductName").c_str(),&(void *)ValueBuf,&Len) !=0)
AppName->Caption=ValueBuf;
if (VerQueryValue(buf,AnsiString("\\StringFileInfo\\"+CharSet+"\\FileVersion").c_str(),&(void *)ValueBuf,&Len)!=0)
Version->Caption=ValueBuf;
if (VerQueryValue(buf,AnsiString("\\StringFileInfo\\"+CharSet+"\\LegalCopyright").c_str(),&(void *)ValueBuf,&Len)!=0)
Copyright->Caption=ValueBuf;
if (VerQueryValue(buf,AnsiString("\\StringFileInfo\\"+CharSet+"\\CompanyName").c_str(),&(void *)ValueBuf,&Len)!=0)
Company->Caption=ValueBuf;
}
}
GlobalFree(buf);