//获取软件当前的版本
//该版本号是在资源文件中的../Version/VS_VERSION_INFO/FILEVERSION的值
CString CMyPro::GetCurProductVersion()
{
TCHAR cPath[400] = _T(""),szVersionBuffer[400]= _T("");
DWORD dwHandle,InfoSize;
CString strVersion;
::GetModuleFileName(NULL,cPath,sizeof(cPath)); //首先获得版本信息资源的长度
InfoSize = GetFileVersionInfoSize(cPath,&dwHandle); //将版本信息资源读入缓冲区
if(InfoSize==0) return _T("None VerSion Supprot");
TCHAR *InfoBuf = new TCHAR[InfoSize];
GetFileVersionInfo(cPath,0,InfoSize,InfoBuf); //获得生成文件使用的代码页及文件版本
unsigned int cbTranslate = 0;
struct LANGANDCODEPAGE {
WORD wLanguage;
WORD wCodePage;
} *lpTranslate;
VerQueryValue(InfoBuf, TEXT("//VarFileInfo//Translation"),(LPVOID*)&lpTranslate,&cbTranslate);
// Read the file description for each language and code page.
for( int i=0; i < (cbTranslate/sizeof(struct LANGANDCODEPAGE)); i++ )
{
TCHAR SubBlock[400];
wsprintf( SubBlock,
TEXT("//StringFileInfo//%04x%04x//FileVersion"),
lpTranslate[i].wLanguage,
lpTranslate[i].wCodePage);
void *lpBuffer=NULL;
unsigned int dwBytes=0;
VerQueryValue(InfoBuf,
SubBlock,
&lpBuffer,
&dwBytes);
CString strTemp=(TCHAR *)lpBuffer;
strVersion+=strTemp;
}
strVersion.Replace(_T(","),_T("."));
strVersion.Replace(_T(" "),NULL);
return strVersion;
}
在Project->Settings->Linking 的Object/library modules 内输入 version.lib这个库。
当然头文件需加上#include <tchar.h>
和 #include <windows.h>