MFC 获取程序的版本号

1.引入Version.lib

    #pragma comment(lib, "Version.lib ")

    因为我们需要用到VerQueryValue,这一步不可缺少。

2.添加代码

    

CString CCamereCharCheckDlg::GetAppVersion()
{
	CString m_csProductVersion;
	
	/* 获得程序路径 */
	char cPath[200];
	::GetModuleFileName(NULL, cPath, sizeof(cPath)); //获取应用程序路径

	/* 获得版本信息大小 */	
	DWORD dwHandle, InfoSize;
	InfoSize = GetFileVersionInfoSize(cPath, &dwHandle); //获取版本信息总体的大小

	if (InfoSize == 0)
	{
		AfxMessageBox(_T("None VerSion Supprot"));
		return m_csProductVersion;
	}

	char *InfoBuf = new char[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);
		
	for (int i = 0; i < (cbTranslate / sizeof(struct LANGANDCODEPAGE)); i++)
	{
		char  SubBlock[200];
		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 = (char *)lpBuffer;
		m_csProductVersion += strTemp;
	}

	delete InfoBuf;

	return m_csProductVersion;
}

    调用VerQueryValue这个函数可以获得MFC中Version中标志为Blocker Header的项,然后在根据构造参数和相应的偏移值,再次调用VerQueryValue就可以获得指定的信息。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值