Форум — Ответы     (  К темам )
 ?  Anry: Определение версии файла программы (07-05-2003 09:32:12)
Как программным способом определить версию файла программы.
 Andrew (07-05-2003 11:09:11)
Если программа твоя, то вначале надо задать версию в Project->Options->Version Info, а после все что там на вписано можно например так:

//На форме стоят куча Label'ов с именами lbl... соответствующими различным параметрам Версии файла

const AnsiString StrGet[10] = {"CompanyName", "FileDescription", "FileVersion",
"InternalName", "LegalCopyright", "LegalTrademarks", "OriginalFilename",
"ProductName", "ProductVersion", "Comments"};

unsigned long h; //
unsigned long 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; //
unsigned int 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)
lblProductName->Caption = ValueBuf;
if(VerQueryValue(buf, AnsiString("\\StringFileInfo\\"+CharSet+"\\FileDescription").c_str(), &(void*)ValueBuf, &Len)!=0)
lblFileDescription->Caption = ValueBuf;
if(VerQueryValue(buf, AnsiString("\\StringFileInfo\\"+CharSet+"\\FileVersion").c_str(), &(void*)ValueBuf, &Len)!=0)
lblFileVersion->Caption = "Версия " + (AnsiString) ValueBuf;
if(VerQueryValue(buf, AnsiString("\\StringFileInfo\\"+CharSet+"\\LegalCopyright").c_str(), &(void*)ValueBuf, &Len)!=0)
lblLegalCopyright->Caption = ValueBuf;
if(VerQueryValue(buf, AnsiString("\\StringFileInfo\\"+CharSet+"\\CompanyName").c_str(), &(void*)ValueBuf, &Len)!=0)
lblCompanyName->Caption = ValueBuf;
if(VerQueryValue(buf, AnsiString("\\StringFileInfo\\"+CharSet+"\\Comments").c_str(), &(void*)ValueBuf, &Len)!=0)
lblComments->Caption = ValueBuf;
} //if(Len>=4)
} //if (GetFileVersionInfo(
GlobalFree(buf); //