VersionHelpers.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #ifndef _VERSIONHELPERS_H_INCLUDED_
  2. #define _VERSIONHELPERS_H_INCLUDED_
  3. #include <specstrings.h>
  4. namespace DuiLib
  5. {
  6. #define _WIN32_WINNT_NT4 0x0400
  7. #define _WIN32_WINNT_WIN2K 0x0500
  8. #define _WIN32_WINNT_WINXP 0x0501
  9. #define _WIN32_WINNT_WS03 0x0502
  10. #define _WIN32_WINNT_WIN6 0x0600
  11. #define _WIN32_WINNT_VISTA 0x0600
  12. #define _WIN32_WINNT_WS08 0x0600
  13. #define _WIN32_WINNT_LONGHORN 0x0600
  14. #define _WIN32_WINNT_WIN7 0x0601
  15. #define _WIN32_WINNT_WIN8 0x0602
  16. #define _WIN32_WINNT_WINBLUE 0x0603
  17. #define _WIN32_WINNT_WINTHRESHOLD 0x0A00 /* ABRACADABRA_THRESHOLD*/
  18. #define _WIN32_WINNT_WIN10 0x0A00 /* ABRACADABRA_THRESHOLD*/
  19. #define WM_DPICHANGED 0x02E0
  20. static BOOL IsWindowsVersionOrGreater(WORD wMajorVersion, WORD wMinorVersion, WORD wServicePackMajor)
  21. {
  22. OSVERSIONINFOEXW osvi = { sizeof(osvi), 0, 0, 0, 0, {0}, 0, 0 };
  23. DWORDLONG const dwlConditionMask = VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_MINORVERSION, VER_GREATER_EQUAL), VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL);
  24. osvi.dwMajorVersion = wMajorVersion;
  25. osvi.dwMinorVersion = wMinorVersion;
  26. osvi.wServicePackMajor = wServicePackMajor;
  27. return VerifyVersionInfoW(&osvi, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR, dwlConditionMask) != FALSE;
  28. }
  29. static BOOL IsWindowsXPOrGreater()
  30. {
  31. return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 0);
  32. }
  33. static BOOL IsWindowsXPSP1OrGreater()
  34. {
  35. return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 1);
  36. }
  37. static BOOL IsWindowsXPSP2OrGreater()
  38. {
  39. return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 2);
  40. }
  41. static BOOL IsWindowsXPSP3OrGreater()
  42. {
  43. return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 3);
  44. }
  45. static BOOL IsWindowsVistaOrGreater()
  46. {
  47. return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_VISTA), LOBYTE(_WIN32_WINNT_VISTA), 0);
  48. }
  49. static BOOL IsWindowsVistaSP1OrGreater()
  50. {
  51. return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_VISTA), LOBYTE(_WIN32_WINNT_VISTA), 1);
  52. }
  53. static BOOL IsWindowsVistaSP2OrGreater()
  54. {
  55. return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_VISTA), LOBYTE(_WIN32_WINNT_VISTA), 2);
  56. }
  57. static BOOL IsWindows7OrGreater()
  58. {
  59. return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN7), LOBYTE(_WIN32_WINNT_WIN7), 0);
  60. }
  61. static BOOL IsWindows7SP1OrGreater()
  62. {
  63. return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN7), LOBYTE(_WIN32_WINNT_WIN7), 1);
  64. }
  65. static BOOL IsWindows8OrGreater()
  66. {
  67. return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN8), LOBYTE(_WIN32_WINNT_WIN8), 0);
  68. }
  69. static BOOL IsWindows8Point1OrGreater()
  70. {
  71. return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINBLUE), LOBYTE(_WIN32_WINNT_WINBLUE), 0);
  72. }
  73. static BOOL IsWindowsThresholdOrGreater()
  74. {
  75. return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINTHRESHOLD), LOBYTE(_WIN32_WINNT_WINTHRESHOLD), 0);
  76. }
  77. static BOOL IsWindows10OrGreater()
  78. {
  79. return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINTHRESHOLD), LOBYTE(_WIN32_WINNT_WINTHRESHOLD), 0);
  80. }
  81. static BOOL IsWindowsServer()
  82. {
  83. OSVERSIONINFOEXW osvi = { sizeof(osvi), 0, 0, 0, 0, {0}, 0, 0, 0, VER_NT_WORKSTATION };
  84. DWORDLONG const dwlConditionMask = VerSetConditionMask(0, VER_PRODUCT_TYPE, VER_EQUAL);
  85. return !VerifyVersionInfoW(&osvi, VER_PRODUCT_TYPE, dwlConditionMask);
  86. }
  87. }
  88. #endif // _VERSIONHELPERS_H_INCLUDED_