void GetFileVersionInformation(char *Result,int Size)
{
LPVOID lpStr1 = NULL;
LPVOID lpStr2 = NULL;
WORD* wTmp;
DWORD dwHandle_dammy = NULL;
UINT nRet;
UINT dwLength;
char sFileName[1024];
char sTmp[1024];
char *sInfo;
if ((Result==NULL) || (Size==0)) return;
memset(sFileName,0x00,1024);
GetModuleFileName(NULL,sFileName,1024);
//バージョン情報のサイズを取得する
DWORD dwInfoSize = GetFileVersionInfoSize((char*)(LPCTSTR)sFileName, &dwHandle_dammy);
LPVOID* pVersionInfo = new LPVOID[dwInfoSize];
nRet = GetFileVersionInfo((char*)(LPCTSTR)sFileName, dwHandle_dammy, dwInfoSize, pVersionInfo);
if(nRet){
//言語IDとキャラクタIDを取得する
nRet = VerQueryValue(pVersionInfo, "\\VarFileInfo\\Translation", &lpStr1, &dwLength);
if(nRet){
wTmp = (WORD*)lpStr1;
//バージョン情報を取得する
StringCbPrintfA(sTmp,1024,"\\StringFileInfo\\%04x%04x\\FileVersion", *wTmp, *(wTmp + 1));
nRet = VerQueryValue(pVersionInfo, sTmp, &lpStr2, &dwLength);
if(nRet) sInfo = (char*)lpStr2;
else sInfo = "";
strncpy(Result,sInfo,Size-1);
} else {
strncpy(Result,"",Size-1);
}
} else {
strncpy(Result,"",Size-1);
}
delete[] pVersionInfo;
}
=====
AnsiString 版
AnsiString GetFileVersionInformation(void)
{
LPVOID lpStr1 = NULL;
LPVOID lpStr2 = NULL;
WORD* wTmp;
DWORD dwHandle_dammy = NULL;
UINT nRet;
UINT dwLength;
AnsiString sTmp;
AnsiString sInfo;
AnsiString Result="";
//バージョン情報のサイズを取得する
DWORD dwInfoSize = GetFileVersionInfoSize(Application->ExeName.c_str(), &dwHandle_dammy);
LPVOID* pVersionInfo = new LPVOID[dwInfoSize];
nRet = GetFileVersionInfo(Application->ExeName.c_str(), dwHandle_dammy, dwInfoSize, pVersionInfo);
if(nRet){
//言語IDとキャラクタIDを取得する
nRet = VerQueryValue(pVersionInfo, "\\VarFileInfo\\Translation", &lpStr1, &dwLength);
if(nRet){
wTmp = (WORD*)lpStr1;
//バージョン情報を取得する
sTmp.sprintf("\\StringFileInfo\\%04x%04x\\FileVersion", *wTmp, *(wTmp + 1));
nRet = VerQueryValue(pVersionInfo, sTmp.c_str(), &lpStr2, &dwLength);
if(nRet) Result = (char*)lpStr2;
else Result = "-";
} else {
Result="-";
}
} else {
Result="-";
}
delete[] pVersionInfo;
return Result;
}