xref: /MusicPlayer2/MusicPlayer2/WinVersionHelper.cpp (revision afd8637a56a6f8d1d098080eeb3f2a4beaf1b359)
1 #include "stdafx.h"
2 #include "WinVersionHelper.h"
3 
WinVersion()4 WinVersion::WinVersion()
5 {
6 	DWORD dwMajorVer{}, dwMinorVer{}, dwBuildNumber{};
7 	HMODULE hModNtdll{};
8 	if (hModNtdll = ::LoadLibraryW(L"ntdll.dll"))
9 	{
10 		typedef void (WINAPI *pfRTLGETNTVERSIONNUMBERS)(DWORD*, DWORD*, DWORD*);
11 		pfRTLGETNTVERSIONNUMBERS pfRtlGetNtVersionNumbers;
12 		pfRtlGetNtVersionNumbers = (pfRTLGETNTVERSIONNUMBERS)::GetProcAddress(hModNtdll, "RtlGetNtVersionNumbers");
13 		if (pfRtlGetNtVersionNumbers)
14 		{
15 			pfRtlGetNtVersionNumbers(&dwMajorVer, &dwMinorVer, &dwBuildNumber);
16 			dwBuildNumber &= 0x0ffff;
17 		}
18 		::FreeLibrary(hModNtdll);
19 		hModNtdll = NULL;
20 	}
21 	m_major_version = dwMajorVer;
22 	m_minor_version = dwMinorVer;
23 	m_build_number = dwBuildNumber;
24 }
25 
26 ///////////////////////////////////////////////////////////////////////////////
27 WinVersion CWinVersionHelper::m_version;
28 bool CWinVersionHelper::m_windows10_light_theme{ false };
29 
CWinVersionHelper()30 CWinVersionHelper::CWinVersionHelper()
31 {
32 }
33 
~CWinVersionHelper()34 CWinVersionHelper::~CWinVersionHelper()
35 {
36 }
37 
IsWindows11OrLater()38 bool CWinVersionHelper::IsWindows11OrLater()
39 {
40     if (m_version.m_major_version > 10)
41         return true;
42     else if (m_version.m_major_version == 10 && m_version.m_minor_version > 0)
43         return true;
44     else if (m_version.m_major_version == 10 && m_version.m_minor_version == 0 && m_version.m_build_number >= 21996)
45         return true;
46     else return false;
47 
48 }
49 
IsWindows10()50 bool CWinVersionHelper::IsWindows10()
51 {
52     return IsWindows10OrLater() && !IsWindows11OrLater();
53 }
54 
IsWindows10FallCreatorOrLater()55 bool CWinVersionHelper::IsWindows10FallCreatorOrLater()
56 {
57 	if (m_version.m_major_version > 10)
58 		return true;
59 	else if (m_version.m_major_version == 10 && m_version.m_minor_version > 0)
60 		return true;
61 	else if (m_version.m_major_version == 10 && m_version.m_minor_version == 0 && m_version.m_build_number >= 16299)
62 		return true;
63 	else return false;
64 }
65 
IsWindowsVista()66 bool CWinVersionHelper::IsWindowsVista()
67 {
68 	return (m_version.m_major_version == 6 && m_version.m_minor_version == 0);
69 }
70 
IsWindows7()71 bool CWinVersionHelper::IsWindows7()
72 {
73 	return (m_version.m_major_version == 6 && m_version.m_minor_version == 1);
74 }
75 
IsWindows7OrLater()76 bool CWinVersionHelper::IsWindows7OrLater()
77 {
78 	if (m_version.m_major_version > 6)
79 		return true;
80 	else if (m_version.m_major_version == 6 && m_version.m_minor_version >= 1)
81 		return true;
82 	else return false;
83 }
84 
IsWindows8Or8point1()85 bool CWinVersionHelper::IsWindows8Or8point1()
86 {
87 	return (m_version.m_major_version == 6 && m_version.m_minor_version > 1);
88 }
89 
IsWindows8OrLater()90 bool CWinVersionHelper::IsWindows8OrLater()
91 {
92 	if (m_version.m_major_version > 6)
93 		return true;
94 	else if (m_version.m_major_version == 6 && m_version.m_minor_version > 1)
95 		return true;
96 	else return false;
97 }
98 
IsWindows81OrLater()99 bool CWinVersionHelper::IsWindows81OrLater() {
100 	if (m_version.m_major_version > 6) return true;
101 	else if (m_version.m_major_version == 6 && m_version.m_minor_version > 2) return true;
102 	return false;
103 }
104 
IsWindows10OrLater()105 bool CWinVersionHelper::IsWindows10OrLater()
106 {
107 	return (m_version.m_major_version >= 10);
108 }
109 
IsWindows10Version1809OrLater()110 bool CWinVersionHelper::IsWindows10Version1809OrLater()
111 {
112 	if (m_version.m_major_version > 10)
113 		return true;
114 	else if (m_version.m_major_version == 10 && m_version.m_minor_version > 0)
115 		return true;
116 	else if (m_version.m_major_version == 10 && m_version.m_minor_version == 0 && m_version.m_build_number >= 17763)
117 		return true;
118 	else return false;
119 }
120 
IsWindows10LightTheme()121 bool CWinVersionHelper::IsWindows10LightTheme()
122 {
123 	return m_windows10_light_theme;
124 }
125 
126 
CheckWindows10LightTheme()127 void CWinVersionHelper::CheckWindows10LightTheme()
128 {
129     m_windows10_light_theme = false;
130     if (m_version.m_major_version >= 10)
131     {
132         HKEY hKey;
133         DWORD dwThemeData(0);
134         LONG lRes = RegOpenKeyExW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize", 0, KEY_READ, &hKey);
135         if (lRes == ERROR_SUCCESS) {
136             GetDWORDRegKeyData(hKey, L"SystemUsesLightTheme", dwThemeData);
137             m_windows10_light_theme = (dwThemeData != 0);
138         }
139         RegCloseKey(hKey);
140     }
141 }
142 
GetDWORDRegKeyData(HKEY hKey,const wstring & strValueName,DWORD & dwValueData)143 LONG CWinVersionHelper::GetDWORDRegKeyData(HKEY hKey, const wstring& strValueName, DWORD& dwValueData)
144 {
145 	DWORD dwBufferSize(sizeof(DWORD));
146 	DWORD dwResult(0);
147 	LONG lError = ::RegQueryValueExW(hKey, strValueName.c_str(), NULL, NULL, reinterpret_cast<LPBYTE>(&dwResult), &dwBufferSize);
148 	if (lError == ERROR_SUCCESS)
149 		dwValueData = dwResult;
150 	return lError;
151 }
152