如何读取程序的版本信息

                                       如何读取程序的版本信息

     读取程序的版本信息主要依靠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;  
}

你可能感兴趣的:(如何读取程序的版本信息)