vc下获得文件版本信息

  我想大家在做软件升级的时候,经常想到要获取当前软件的版本与网络的中的一个软件版本进行判断,是否需要对软件进行更新升级.我最近也在做,本来想到网上下一段获取版本的代码,想不到找了许久,都找不到一个能拷来就在mfc环境下面用的.也许是本人找东西的功力还非常有限,我愿意把自己拼凑好的代码贴出来,让和我一样,不愿去写一些琐碎的代码和没有较强的搜索欲望的朋友.
  以下是我个人获得当前运行程序的版本的函数,可以直接在mfc环境下使用,由于使用到CString这个类,要移到别的环境,还要做一点改动.
  CString CLogInDlg::GetFileVer()
{
 char cPath[200],szVersionBuffer[200];
 DWORD dwHandle,InfoSize;
 CString strVersion;
 ::GetModuleFileName(NULL,cPath,sizeof(cPath));
   //首先获得版本信息资源的长度
   InfoSize = GetFileVersionInfoSize(cPath,&dwHandle);
   //将版本信息资源读入缓冲区
   if(InfoSize==0) return _T("None VerSion Supprot");
   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);
// Read the file description for each language and code page.
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;
  strVersion+=strTemp;
 
}
delete InfoBuf ;
return strVersion;


}
希望对大家有些帮助

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值