C/C++/MFC
FILE (한글2000) 파일 버전 얻기
2006.07.15 11:37
#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);
}
#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);
}