별도의 설명이 없어도 아래의 소스를 보면 뭐하는놈은지 딱 보인다.
바이너리 파일의 속성창에 버전 정보를 불러오는 소스다.
아래 주석중 //버전정보에 있는 노랗게 표시된 문자열에 FileVersion 대신 다른 값을 넣으면 그 값을
가져올수 있다.
double GetFileVerSion()
{
BYTE *block;
DWORD FAR *translation;
DWORD FAR *buffer;
DWORD handle;
UINT bytes;
CString strPath(GetFilePath());
TCHAR *lpszFileName = (LPTSTR)(LPCTSTR)strPath;
TCHAR name[512];
TCHAR data[256];
CString szString, strVersion[4];
double dversion = 0;
// 버전 정보의 실제 크기를 가져온다.
bytes = (UINT)GetFileVersionInfoSize( lpszFileName, &handle);
if(bytes)
{
block = new BYTE[bytes];
// 버전 정보에 대한 실제 블록을 가져온다.
if( GetFileVersionInfo( lpszFileName, handle, bytes, block) )
{
if( VerQueryValue( block, _T("\\VarFileInfo\\Translation"), (LPVOID *)&translation,
(UINT FAR *)&bytes) )
{
// 버전 정보
wsprintf(name, _T("\\StringFileInfo\\%04x%04x\\FileVersion"),
LOWORD(*translation), HIWORD(*translation) );
if( VerQueryValue(block, name, (LPVOID *)&buffer, (UINT FAR *)&bytes) )
{
szString.Format(_T("%s"), (LPCTSTR)buffer );
for(int i = 0; i < 4; i++)
{
AfxExtractSubString(strVersion[i], szString, i, ',');
strVersion[i].TrimLeft(" "); strVersion[i].TrimRight(" ");
}
szString.Format(_T("%s%s%s%s"), strVersion[0], strVersion[1], strVersion[2], strVersion[3]);
dversion = atof(szString);
}
else
szString.Format(_T("Unable to get Version Info"), data);
}
else
szString.Format( _T("(Unable to get translation type)") );
}
else
szString.Format( _T("(Unable to get FileVersionInfo)") );
delete [] block;
}
else
{
szString.Format( _T("(Unable to get FileVersionInfo size)") );
}
return dversion;
}




