引入相应lib库文件
#pragma comment(lib,"Version.lib")
函数实现代码,返回一个字符串的版本信息
CString m_csProductVersion; //版本信息字符串
char cPath[MAX_PATH];
::GetModuleFileName(NULL,cPath,sizeof(cPath));
DWORD dwHandle,dwInfoSizef;
dwInfoSizef = GetFileVersionInfoSize(cPath,&dwHandle);
if(0 == dwInfoSizef)
{
AfxMessageBox(_T("获取版本信息失败"));
return FALSE;
}
char *pInfoBuf = new char[dwInfoSizef];
GetFileVersionInfo(cPath,NULL,dwInfoSizef,pInfoBuf);
unsigned int cbTranslate = 0;
struct LANGANDCODEPAGE{
WORD wLanguage;
WORD wCodePage;
}*lpTranslate;
VerQueryValue(pInfoBuf,TEXT("\\VarFileInfo\\Translation"),(LPVOID*)&lpTranslate,&cbTranslate);
m_csVer.Empty ();
for(int i =0 ;i <(cbTranslate / sizeof(struct LANGANDCODEPAGE));i++)
{
char SubBlock[MAX_PATH];
wsprintf(SubBlock,
TEXT("\\StringFileInfo\\%04x%04x\\FileVersion"),
lpTranslate[i].wLanguage,
lpTranslate[i].wCodePage);
void *lpBuffer = NULL;
unsigned int dwBytes =0;
VerQueryValue(pInfoBuf,
SubBlock,
&lpBuffer,
&dwBytes);
CString strTemp=(char*)lpBuffer;
m_csProductVersion +=strTemp;
}
delete pInfoBuf;//注意删除所申请的动态空间
return m_csProductVersion ; //返回版本信息
本文介绍如何在MFC中通过调用Windows API获取当前程序的版本信息。首先,引入Version.lib库,然后使用GetModuleFileName获取模块路径,接着通过GetFileVersionInfoSize和GetFileVersionInfo获取版本信息大小和内容。再利用VerQueryValue解析版本信息,最后将多个语言版本的文件版本号合并成一个字符串并返回。

898

被折叠的 条评论
为什么被折叠?



