#pragma comment(lib,"version.lib")
//主版本号 . 子版本号 [ 修正版本号 [. 编译版本号 ]]
//Major_Version_Number.Minor_Version_Number[Revision_Number[.Build_Number]]
int GetFileVerInfo(DWORD &major, DWORD &minor, DWORD &revision, DWORD &build)
{
TCHAR AppPathName[MAX_PATH];//应用程序路径
::GetModuleFileName(NULL, AppPathName, MAX_PATH);
// 版本信息大小
UINT VersionInfoSize = ::GetFileVersionInfoSize(AppPathName, 0);
if(VersionInfoSize == 0) return VersionInfoSize; //0 failed
TCHAR* pVersionInfo = new TCHAR[VersionInfoSize];//申请空间
UINT uiSize = 0;
if (::GetFileVersionInfo(AppPathName, 0, VersionInfoSize, pVersionInfo) != 0)//获取版本信息
{
VS_FIXEDFILEINFO* verInfo = NULL;
// 查询根信息,转换成4段的版本号
if(::VerQueryValue((LPVOID)(pVersionInfo),_T("\\"),(LPVOID*)(&verInfo),&uiSize))
{
major = HIWORD(verInfo->dwFileVersionMS);
minor= LOWORD(verInfo->dwFileVersionMS);
revision = HIWORD(verInfo->dwFileVersionLS);
build= LOWORD(verInfo->dwFileVersionLS);
}
}
delete [] pVersionInfo; //verInfo will free when pBlock free
return uiSize;
}
void CTestView::OnInitialUpdate()
{
CView::OnInitialUpdate();
DWORD major, minor,revision,build;
GetFileVerInfo(major, minor, revision,build);
TCHAR buf[100];
wsprintf(buf, "V%d.%d.%d.%d",major, minor, revision,build);
AfxMessageBox(buf);
}