본문 바로가기
■ 프로그래밍, 개발

### 파일 버젼 얻어 오기 GetFileVersion

by 토크맨 2014. 1. 31.
반응형

 ### 파일 버젼 얻어 오기 

 

Link     Version.lib

 

#include <Winver.h>

#include <Windows.h>

 

 

CString CTestDlg::GetFileVersion(CString strPath)

{

DWORD dwSize = GetFileVersionInfoSize( strPath , 0 );

char * buffer = new char[dwSize];

memset( buffer, 0, dwSize);

 

GetFileVersionInfo( strPath, 0, dwSize, buffer); 

 

//FileVersion : 파일 버젼

//InternalName : 내부 이름

//LegalTrademarks : 등록 상표

//OriginalFilename : 원본 파일 이름

//ProductVersion : 제품 버전

//ProductName : 제품 이름

//CompanyName : 회사이름

 

 

 

struct LANGANDCODEPAGE {

WORD wLanguage;

WORD wCodePage;

} *lpTranslate;

 

UINT   cbTranslate;

UINT   dwBytes;

LPBYTE lpBuffer;

 

VerQueryValue(buffer, 

            TEXT("\\VarFileInfo\\Translation"),

            (LPVOID*)&lpTranslate,

            &cbTranslate);

 

CString strSub;

strSub.Format("\\StringFileInfo\\%04x%04x\\FileVersion", 

lpTranslate[0].wLanguage,

lpTranslate[0].wCodePage);

 

VerQueryValue(buffer, 

(LPTSTR)(LPCTSTR)strSub, 

(LPVOID*)&lpBuffer, 

&dwBytes); 

 

if(dwBytes<=0)

{

if(buffer)

delete [] buffer;

return NULL;

}

 

CString strReturn = _T("");

    strReturn = (CString)lpBuffer;

delete [] buffer;

return strReturn;

 

return "";

}

 

                  TEXT("\\VarFileInfo\\Translation"),

 

                  (LPVOID*)&lpTranslate,

 

                  &cbTranslate);

 

 

 

    CString strSub;

 

    strSub.Format("\\StringFileInfo\\%04x%04x\\ProductVersion", 

 

                lpTranslate[0].wLanguage,

 

                lpTranslate[0].wCodePage);

 

    

 

    VerQueryValue(buffer, 

 

                    (LPTSTR)(LPCTSTR)strSub, 

 

                    (LPVOID*)&lpBuffer, 

 

                    &dwBytes); 

 

 

 

    // 여기서 dwBytes 가 0 이라면 lpBuffer 는 trash 이므로 error 처리 필요

 

 

 

    CString strReturn = lpBuffer;

 

 

 

    delete [] buffer;

 

 

 

    return strReturn;

 

    

 

}

 

 

 

반응형

댓글