如何读取程序的版本信息
读取程序的版本信息主要依靠GetFileVersionInfoSize,GetFileVersionInfo,VerQueryValue这三个函数,需要注意是在VC++6.0中要使用这几个函数,应在源文件中插入
#pragma comment( lib, "Version.lib" )//没有它不能正确链接读取版本信息的函数
具体使用方法请参照下面的程序段:
void CVersionInfoDlg::OnButton1()
{
// TODO: Add your control notification handler code here
DWORD dwSize=1024,dwHandle;
BYTE *byData, *lpFileDes,*lpVers;
char sTitle[1024];
char sAppName[512];
CString strVersion="";
unsigned int uLen;
//获得版本号
sprintf(sAppName,"%s.exe",AfxGetApp()->m_pszExeName);//用此句获得当前程序的文件名,当然可替换为其它程序的路径
char *p=new char[20];
dwSize=GetFileVersionInfoSize(sAppName,&dwHandle); //用此句获得版本信息所需要的空间大小
byData=new BYTE[dwSize+10];
GetFileVersionInfo(sAppName,0,dwSize,byData); //将版本信息全部读取
VerQueryValue(byData,TEXT("//StringFileInfo//080404B0//CompanyName"),(void **)&lpVers,&uLen);//得到编写本程序的公司名称 040904B0英文 080404B0中文
strVersion+="CompanyName:";
strVersion+=lpVers;
VerQueryValue(byData,TEXT("//StringFileInfo//080404B0//FileDescription"),(void **)&lpVers,&uLen);//040904B0英文 080404B0中文
strVersion+="/nFileDescription:";
strVersion+=lpVers;
VerQueryValue(byData,TEXT("//StringFileInfo//080404B0//FileVersion"),(void **)&lpVers,&uLen);//040904B0英文 080404B0中文
strVersion+="/nFileVersion:";
strVersion+=lpVers;
VerQueryValue(byData,TEXT("//StringFileInfo//080404B0//InternalName"),(void **)&lpVers,&uLen);//040904B0英文 080404B0中文
strVersion+="/nInternalName:";
strVersion+=lpVers;
VerQueryValue(byData,TEXT("//StringFileInfo//080404B0//LegalCopyright"),(void **)&lpVers,&uLen);//040904B0英文 080404B0中文
strVersion+="/nLegalCopyright:";
strVersion+=lpVers;
VerQueryValue(byData,TEXT("//StringFileInfo//080404B0//LegalTrademarks"),(void **)&lpVers,&uLen);//040904B0英文 080404B0中文
strVersion+="/nLegalTrademarks:";
strVersion+=lpVers;
VerQueryValue(byData,TEXT("//StringFileInfo//080404B0//OriginalFilename"),(void **)&lpVers,&uLen);//040904B0英文 080404B0中文
strVersion+="/nOriginalFilename:";
strVersion+=lpVers;
VerQueryValue(byData,TEXT("//StringFileInfo//080404B0//ProductName"),(void **)&lpVers,&uLen);//040904B0英文 080404B0中文
strVersion+="/nProductName:";
strVersion+=lpVers;
VerQueryValue(byData,TEXT("//StringFileInfo//080404B0//ProductVersion"),(void **)&lpVers,&uLen);//040904B0英文 080404B0中文
strVersion+="/nProductVersion:";
strVersion+=lpVers;
unsigned int *lpVerI; char *s=new char[20];
VerQueryValue(byData,TEXT("//VarFileInfo//Translation"),(void **)&lpVerI,&uLen);//040904B0英文 080404B0中文
if(uLen>0)
{
strVersion+="/nTranslation:";
strVersion+=_itoa(*lpVerI%(0x10000),s,16);
strVersion+="0";
strVersion+=_itoa(*lpVerI/(0x10000),s,16);
}
//去掉版本信息中空格,并将','改为'.'
strVersion.Replace("," , ".");
strVersion.Replace(" ", "");
//设置版本号
MessageBox(strVersion,"指定程序的版本信息",1);//将标题设置成版本号
delete[] byData;
}