vc下获得文件版本信息

王朝vc·作者佚名  2006-01-10
窄屏简体版  字體: |||超大  

我想大家在做软件升级的时候,经常想到要获取当前软件的版本与网络的中的一个软件版本进行判断,是否需要对软件进行更新升级.我最近也在做,本来想到网上下一段获取版本的代码,想不到找了许久,都找不到一个能拷来就在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;

}

return strVersion;

}

希望对大家有些帮助

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航