FileVersion.hpp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #pragma once
  2. #ifndef _INC_SHLWAPI
  3. #include < Shlwapi.h >
  4. #endif
  5. #pragma comment (lib, "shlwapi.lib")
  6. #ifndef VER_H
  7. #include < WinVer.h >
  8. #endif
  9. #pragma comment (lib, "Version.lib ")
  10. //-----------------------------------------------------------------------------
  11. // FileVersion
  12. //-----------------------------------------------------------------------------
  13. class FileVersion
  14. {
  15. using XPCTSTR = const char *;
  16. public:
  17. FileVersion ();
  18. FileVersion (XPCTSTR lpszFileName);
  19. virtual ~FileVersion ();
  20. public:
  21. bool Open (IN XPCTSTR lpszFileName);
  22. void Close (void);
  23. public:
  24. inline bool IsValid () const;
  25. inline WORD GetVersionMajor () const;
  26. inline WORD GetVersionMinor () const;
  27. inline WORD GetVersionBuild () const;
  28. inline WORD GetVersionRevision () const;
  29. std::string GetVersionString () const; // return a string like 7.3.1.6
  30. protected:
  31. bool GetVersionInfo (IN XPCTSTR lpszFileName);
  32. protected:
  33. bool m_bValid; // Version info is loaded
  34. VS_FIXEDFILEINFO m_vsffi; // Fixed File Info (FFI)
  35. };
  36. // The format of the version number is as follows (optional components are shown in square brackets ([and]) :
  37. // major.minor [.build [.revision]]
  38. // HIWORD (ffi.dwFileVersionMS) - major
  39. // LOWORD (ffi.dwFileVersionMS) - minor
  40. // HIWORD (ffi.dwFileVersionLS) - build
  41. // LOWORD (ffi.dwFileVersionLS) - revision
  42. inline bool FileVersion::IsValid (void) const
  43. { return m_bValid; }
  44. inline WORD FileVersion::GetVersionMajor (void) const
  45. { ASSERT (m_bValid); return HIWORD (m_vsffi.dwFileVersionMS); }
  46. inline WORD FileVersion::GetVersionMinor (void) const
  47. { ASSERT (m_bValid); return LOWORD (m_vsffi.dwFileVersionMS); }
  48. inline WORD FileVersion::GetVersionBuild (void) const
  49. { ASSERT (m_bValid); return HIWORD (m_vsffi.dwFileVersionLS); }
  50. inline WORD FileVersion::GetVersionRevision (void) const
  51. { ASSERT (m_bValid); return LOWORD (m_vsffi.dwFileVersionLS); }