封装类之FileVersion(获取文件属性)

来源:互联网 发布:linux 文件系统 编辑:程序博客网 时间:2024/05/21 22:39

应用此类可以获取应用程序的程序名,产品名称,公司名称,版本号,版权等信息
1XX.h文件

class CFileVersion  {   // Construction  public:       CFileVersion();  // Operations     public:       BOOL    Open(LPCTSTR lpszModuleName);      void    Close();      CString QueryValue(LPCTSTR lpszValueName, DWORD dwLangCharset = 0);      CString GetFileDescription()  {return QueryValue(_T("FileDescription")); };      CString GetFileVersion()      {return QueryValue(_T("FileVersion"));     };      CString GetInternalName()     {return QueryValue(_T("InternalName"));    };      CString GetCompanyName()      {return QueryValue(_T("CompanyName"));     };       CString GetLegalCopyright()   {return QueryValue(_T("LegalCopyright"));  };      CString GetOriginalFilename() {return QueryValue(_T("OriginalFilename"));};      CString GetProductName()      {return QueryValue(_T("ProductName"));     };      CString GetProductVersion()   {return QueryValue(_T("ProductVersion"));  };      BOOL    GetFixedInfo(VS_FIXEDFILEINFO& vsffi);      CString GetFixedFileVersion();      CString GetFixedProductVersion();      // Attributes  protected:      LPBYTE  m_lpVersionData;       DWORD   m_dwLangCharset;       // Implementation  public:      ~CFileVersion();   };   

2XX.cpp文件

//构造函数初始化CFileVersion::CFileVersion()   {       m_lpVersionData = NULL;      m_dwLangCharset = 0;  }  //析构函数 退出释放资源CFileVersion::~CFileVersion()   {       Close();  }   void CFileVersion::Close()  {      delete[] m_lpVersionData;       m_lpVersionData = NULL;      m_dwLangCharset = 0;  }  //打开版本信息文件,获取文件属性的翻译表获取语言编码BOOL CFileVersion::Open(LPCTSTR lpszModuleName)  {  ASSERT(_tcslen(lpszModuleName) > 0);  ASSERT(m_lpVersionData == NULL);  // Get the version information size for allocate the buffer  DWORD dwHandle;       DWORD dwDataSize = GetFileVersionInfoSize((LPTSTR)lpszModuleName, &dwHandle);   if ( dwDataSize == 0 )   return FALSE;  // Allocate buffer and retrieve version information  m_lpVersionData = new BYTE[dwDataSize];   if (!GetFileVersionInfo((LPTSTR)lpszModuleName, dwHandle, dwDataSize,       (void**)m_lpVersionData) )  {      Close();      return FALSE;  }  // Retrieve the first language and character-set identifier  UINT nQuerySize;  DWORD* pTransTable;  if (!VerQueryValue(m_lpVersionData, _T("\\VarFileInfo\\Translation"),      (void **)&pTransTable, &nQuerySize) )  {      Close();      return FALSE;  }  // Swap the words to have lang-charset in the correct format      m_dwLangCharset = MAKELONG(HIWORD(pTransTable[0]), LOWORD(pTransTable[0]));      return TRUE;    }  //获指定文件属性信息   "\StringFileInfo\languagecodepage\stringname"CString CFileVersion::QueryValue(LPCTSTR lpszValueName,                                    DWORD dwLangCharset /* = 0*/)  {      // Must call Open() first      ASSERT(m_lpVersionData != NULL);      if ( m_lpVersionData == NULL )          return (CString)_T("");      // If no lang-charset specified use default      if ( dwLangCharset == 0 )          dwLangCharset = m_dwLangCharset;      // Query version information value      UINT nQuerySize;      LPVOID lpData;      CString strValue, strBlockName;      strBlockName.Format(_T("\\StringFileInfo\\%08lx\\%s"),           dwLangCharset, lpszValueName);      if ( VerQueryValue((void **)m_lpVersionData, strBlockName.GetBuffer(0),           &lpData, &nQuerySize) )          strValue = (LPCTSTR)lpData;      strBlockName.ReleaseBuffer();      return strValue;  }  //获取文件的版本信息   VS_FIXEDFILEINFO包含文件的版本信息BOOL CFileVersion::GetFixedInfo(VS_FIXEDFILEINFO& vsffi)  {      // Must call Open() first      ASSERT(m_lpVersionData != NULL);      if ( m_lpVersionData == NULL )          return FALSE;      UINT nQuerySize;      VS_FIXEDFILEINFO* pVsffi;      if ( VerQueryValue((void **)m_lpVersionData, _T("\\"),          (void**)&pVsffi, &nQuerySize) )      {          vsffi = *pVsffi;          return TRUE;      }      return FALSE;  }  //获取文件的版本信息CString CFileVersion::GetFixedFileVersion()  {      CString strVersion;      VS_FIXEDFILEINFO vsffi;      if ( GetFixedInfo(vsffi) )      {          strVersion.Format (_T("%u,%u,%u,%u"),HIWORD(vsffi.dwFileVersionMS),              LOWORD(vsffi.dwFileVersionMS),              HIWORD(vsffi.dwFileVersionLS),              LOWORD(vsffi.dwFileVersionLS));      }      return strVersion;  }  //获取产品的版本信息CString CFileVersion::GetFixedProductVersion()  {      CString strVersion;      VS_FIXEDFILEINFO vsffi;      if ( GetFixedInfo(vsffi) )      {          strVersion.Format (_T("%u,%u,%u,%u"), HIWORD(vsffi.dwProductVersionMS),              LOWORD(vsffi.dwProductVersionMS),              HIWORD(vsffi.dwProductVersionLS),              LOWORD(vsffi.dwProductVersionLS));      }      return strVersion;  }  

3在使用的过程中实例化一个对象,调用相关的函数即可

这里写图片描述
在这里可以查到相关的文件属性信息,也可以在里面修改文件信息

0 0
原创粉丝点击