VC 获取程序的版本号

下面是一段用来获取某个文件的版本号的函数:

C++代码
  1. #pragma comment (lib, "Version.lib")   
  2.   
  3. BOOL GetFileVersion(LPCTSTR strFile, CString& strVersion)   
  4. {   
  5.     TCHAR szVersionBuffer[8192] = _T("");   
  6.     DWORD dwVerSize;   
  7.     DWORD dwHandle;   
  8.   
  9.     dwVerSize = GetFileVersionInfoSize(strFile, &dwHandle);   
  10.     if (dwVerSize == 0)   
  11.         return FALSE;   
  12.   
  13.     if (GetFileVersionInfo(strFile, 0, dwVerSize, szVersionBuffer))   
  14.     {   
  15.         VS_FIXEDFILEINFO * pInfo;   
  16.         unsigned int nInfoLen;   
  17.   
  18.         if (VerQueryValue(szVersionBuffer, _T("//"), (void**)&pInfo, &nInfoLen))  
  19.         {  
  20.             strVersion.Format(_T("%d.%d.%d.%d"),   
  21.                 HIWORD(pInfo->dwFileVersionMS), LOWORD(pInfo->dwFileVersionMS),   
  22.                 HIWORD(pInfo->dwFileVersionLS), LOWORD(pInfo->dwFileVersionLS));   
  23.             return TRUE;   
  24.         }   
  25.     }   
  26.   
  27.     return FALSE;   
  28. }  

上面这段函数可以灵活指定想要获取的PE文件的版本号,比如要获取注册表编辑器的版本号的话,那么:

C++代码
  1. #include "MyFunction.h"  //这个是上面那个函数所在的头文件      
  2.      
  3. void GerRegeditVer(void)      
  4. {      
  5.     TChar strregfname[] = _T("C://Windows/regedit.exe");      
  6.     CString regver;      
  7.     GetFileVersion(strregfname, regver);      
  8.     MessageBox(regver);    //这里弹出regedit.exe的版本号      
  9. }    

 

 

-------------------------------------------------------------------------------------

 

 

CString   IS_GetAppVersion(char*   AppName)  
  {  
  CString   AppVersion;  
  //AppVersion=IS_GetAppCreateTime(AppName);  
   
  DWORD   RessourceVersionInfoSize;  
  DWORD   JustAJunkVariabel;  
  char*   VersionInfoPtr;  
  struct   LANGANDCODEPAGE   {  
      WORD   wLanguage;  
      WORD   wCodePage;  
  }   *TranslationPtr;  
  char*   InformationPtr;  
  UINT     VersionInfoSize;  
  char     VersionValue[255];  
   
          RessourceVersionInfoSize=GetFileVersionInfoSize(AppName,&JustAJunkVariabel);  
          if(0!=RessourceVersionInfoSize)  
          {  
                  VersionInfoPtr=new   char[RessourceVersionInfoSize];  
                          if(GetFileVersionInfo(AppName,0,RessourceVersionInfoSize,VersionInfoPtr))  
                          {  
                          if(!VerQueryValue(  
                                  VersionInfoPtr,  
                                  TEXT("VarFileInfo//Translation"),  
                                          (LPVOID*)&TranslationPtr,  
                                          &VersionInfoSize))  
                                          {  
                          delete[]   VersionInfoPtr;  
                                                  return   AppVersion;  
                                          }  
                          }  
   
          //   retrieve   File   Description  
  wsprintf(VersionValue,  
                          TEXT("//StringFileInfo//%04x%04x//FileVersion"),  
                          TranslationPtr[0].wLanguage,  
                          TranslationPtr[0].wCodePage);  
   
      if(!VerQueryValue(  
                          VersionInfoPtr,  
                                  VersionValue,  
                                  (LPVOID*)&InformationPtr,  
                                  &VersionInfoSize))  
                                  {  
                                  delete[]   VersionInfoPtr;  
                                          return   AppVersion;  
                                  }  
  if(strlen(InformationPtr)>0)   //Not   Null  
                          {  
                          AppVersion=CString(InformationPtr);  
                          }  
                          delete[]   VersionInfoPtr;  
          }  
          return   AppVersion;  
  }  
   
   
  notepad.exe也可以得到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值