VerInfo * pVer = new VerInfo("C:\\WINDOWS\\notepad.exe");
for (int i = 0; i < 10; i++)
{
Memo1 -> Lines -> Add(pVer -> GetVerInfo(ilCount));
}
if (pVer != NULL) { delete pVer; pVer = NULL; }
#ifndef versionsinfoH
#define versionsinfoH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <vcl.h>
//----------------------------------------------------------------
// Konstanten für die Verwendung als Parameter mit der
// Funktion GetVerInfo(int iId):
//-----------------------------------------------------------------
const int VI_COMPANY_NAME = 0; // Firmen-Name
const int VI_FILE_DESCRIPTION = 1; // Dateibeschreibung
const int VI_FILE_VERSION = 2; // Versionsnummer
const int VI_INTERNAL_NAME = 3; // Interner Name
const int VI_LEGAL_COPYRIGHT = 4; // Copyright-Info
const int VI_LEGAL_TRADEMARKS = 5; // Warenzeichen
const int VI_ORIGINAL_FILENAME = 6; // Orig.-Dateiname
const int VI_PRODUCT_NAME = 7; // Produktname
const int VI_PRODUCT_VERSION = 8; // Produkt-Version
const int VI_FILE_COMMENTS = 9; // Kommentare
class TVerInfo
{
private:
AnsiString sCompany_name;
AnsiString sFile_description;
AnsiString sFile_version;
AnsiString sInternal_name;
AnsiString sLegal_copyright;
AnsiString sLegal_trademarks;
AnsiString sOriginal_filename;
AnsiString sProduct_name;
AnsiString sProduct_version;
AnsiString sFile_comments;
protected:
char *GetVersionKey(char *cBuffer, const AnsiString &sPrefix, char *cKey);
public:
__fastcall TVerInfo(AnsiString sExeName);
AnsiString GetVerInfo(int iID);
};
#endif
__fastcall TVerInfo::TVerInfo(AnsiString sExeName)
{
DWORD dwHandle;
DWORD dwSize;
sCompany_name = "";
sFile_description = "";
sFile_version = "";
sInternal_name = "";
sLegal_copyright = "";
sLegal_trademarks = "";
sOriginal_filename = "";
sProduct_name = "";
sProduct_version = "";
sFile_comments = "";
if (FileExists(sExeName))
{
dwSize = GetFileVersionInfoSize(sExeName.c_str(), &dwHandle);
if (dwSize > 0)
{
char *cBuffer = new char[dwSize];
if (GetFileVersionInfo(sExeName.c_str(), 0, dwSize, cBuffer))
{
UINT uiDataSize;
unsigned short *usTranslation;
VerQueryValue(cBuffer, "\\VarFileInfo\\Translation",(void **) &usTranslation, &uiDataSize);
AnsiString sPrefix = "\\StringFileInfo\\" + AnsiString::IntToHex(usTranslation [0], 4)+ AnsiString::IntToHex(usTranslation [1], 4);
sCompany_name = GetVersionKey(cBuffer, sPrefix, "CompanyName");
sFile_description = GetVersionKey(cBuffer, sPrefix, "FileDescription");
sFile_version = GetVersionKey(cBuffer, sPrefix, "FileVersion");
sInternal_name = GetVersionKey(cBuffer, sPrefix, "InternalName");
sLegal_copyright = GetVersionKey(cBuffer, sPrefix, "LegalCopyright");
sLegal_trademarks = GetVersionKey(cBuffer, sPrefix, "LegalTrademarks");
sOriginal_filename = GetVersionKey(cBuffer, sPrefix, "OriginalFilename");
sProduct_name = GetVersionKey(cBuffer, sPrefix, "ProductName");
sProduct_version = GetVersionKey(cBuffer, sPrefix, "ProductVersion");
sFile_comments = GetVersionKey(cBuffer, sPrefix, "Comments");
}
delete [] cBuffer;
}
}
}
char* TVerInfo::GetVersionKey(char *cBuffer, const AnsiString &sPrefix, char *cKey)
{
char *cData;
UINT uiDatasize;
AnsiString sFullkey = sPrefix + "\\" + cKey;
bool bStatus = VerQueryValue(cBuffer, sFullkey.c_str(), (void **)&cData, &uiDatasize);
return (bStatus) ? cData : "";
}
AnsiString TVerInfo::GetVerInfo(int iID)
{
AnsiString sRetValue;
switch (iID)
{
case VI_COMPANY_NAME : { sRetValue = sCompany_name; break; }
case VI_FILE_DESCRIPTION : { sRetValue = sFile_description; break; }
case VI_FILE_VERSION : { sRetValue = sFile_version; break; }
case VI_INTERNAL_NAME : { sRetValue = sInternal_name; break; }
case VI_LEGAL_COPYRIGHT : { sRetValue = sLegal_copyright; break; }
case VI_LEGAL_TRADEMARKS : { sRetValue = sLegal_trademarks; break; }
case VI_ORIGINAL_FILENAME : { sRetValue = sOriginal_filename; break; }
case VI_PRODUCT_NAME : { sRetValue = sProduct_name; break; }
case VI_PRODUCT_VERSION : { sRetValue = sProduct_version; break; }
case VI_FILE_COMMENTS : { sRetValue = sFile_comments; break; }
default : { sRetValue = ""; }
}
return sRetValue;
}