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也可以得到

发布了2 篇原创文章 · 获赞 0 · 访问量 3万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览