메뉴 바로가기

서브메뉴 바로가기

본문 바로가기

logo

C/C++/MFC

FILE (한글2000) 파일 버전 얻기

2006.07.15 11:37

WhiteAT 조회 수:9787

#include <Windows.h>
#include <Winver.h>
// C:\\Program Files\\Microsoft Visual Studio\\VC98\\Lib\\version.lib 를 프로젝트에 포함

void CFileInfoDlg::OnButton1()
{
        BYTE       *block;
        DWORD FAR  *translation;
        DWORD FAR  *buffer;
        DWORD        handle;
        UINT        bytes;
        TCHAR           *lpszFileName  = _T(\"c:\\\\hnc\\\\hwp\\\\hwp.EXE\");
        TCHAR        name[512];
        TCHAR        data[256];
        CString        szString;
        
        // 버전 정보의 실제 크기를 가져온다.
        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(\"Version %s\"), (LPCTSTR)buffer );
                                }
                                else
                                        szString.Format(_T(\"Unable to get Version Info\"), data);
                                
                                // Product Name 정보
                                wsprintf(name, _T(\"\\\\StringFileInfo\\\\%04x%04x\\\\ProductName\"), LOWORD(*translation),          HIWORD(*translation) );
                                
                                if( ::VerQueryValue(block, name, (LPVOID *)&buffer, (UINT FAR *)&bytes) ) {
                                        szString.Format( _T(\"%s\"), (LPCTSTR)buffer );
                                }
                                else
                                        szString.Format( _T(\"Unable to get Product Name\") );
                        }
                        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)\") );
        }
        MessageBox(szString);
}