#include <stdio.h>
//---------------------------------------------------------------------------
String GetFileVersionInfo(wchar_t *ModulePath, String KeyName)
{
LPVOID lpStr1 = NULL, lpStr2 = NULL;
WORD* wTmp;
DWORD dwHandlev = NULL;
UINT dwLength;
wchar_t sFileName[1024] = {0};
wchar_t sTmp[1024] = {0};
String sInfo;
LPBYTE *pVersionInfo;
if(ModulePath == NULL) GetModuleFileName( NULL, sFileName, 1024);
else wcscpy(sFileName, ModulePath);
DWORD dwInfoSize = GetFileVersionInfoSize(sFileName, &dwHandlev);
if(dwInfoSize)
{
pVersionInfo = new LPBYTE[dwInfoSize];
if(GetFileVersionInfo(sFileName, dwHandlev, dwInfoSize, pVersionInfo))
{
if(VerQueryValue(pVersionInfo, L"\\VarFileInfo\\Translation", &lpStr1, &dwLength))
{
wTmp = (WORD*)lpStr1;
swprintf(sTmp, ("\\StringFileInfo\\%04x%04x\\" + KeyName).c_str(), *wTmp, *(wTmp + 1));
if(VerQueryValue(pVersionInfo, sTmp, &lpStr2, &dwLength)) sInfo = (LPCTSTR)lpStr2;
}
}
delete[] pVersionInfo;
}
return sInfo;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
String TestFile = ExtractFilePath(ParamStr(0)) + "test.eml";
FileClose(FileCreate(TestFile));
wchar_t Exec[MAX_PATH];
FindExecutable(TestFile.c_str(), NULL, Exec);
Edit1->Text = GetFileVersionInfo(Exec, L"ProductName");
DeleteFile(TestFile);
//Edit1->Text = Exec;
}