]> git.mxchange.org Git - simgear.git/blob - simgear/misc/sgversionhelpers.hxx
Fix #1783: repeated error message on console
[simgear.git] / simgear / misc / sgversionhelpers.hxx
1 // Clean drop-in replacement for the versionhelpers.h header\r
2 //\r
3 // Copyright (C) 2015 Alessandro Menti <alessandro.menti@hotmail.it>\r
4 //\r
5 // This library is free software; you can redistribute it and/or\r
6 // modify it under the terms of the GNU Library General Public\r
7 // License as published by the Free Software Foundation; either\r
8 // version 2 of the License, or (at your option) any later version.\r
9 //\r
10 // This library is distributed in the hope that it will be useful,\r
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
13 // Library General Public License for more details.\r
14 //\r
15 // You should have received a copy of the GNU Library General Public\r
16 // License along with this library; if not, write to the Free Software\r
17 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA\r
18 \r
19 #ifndef SG_VERSIONHELPERS_HXX_\r
20 #define SG_VERSIONHELPERS_HXX_\r
21 \r
22 #include <sdkddkver.h>\r
23 \r
24 #ifdef __cplusplus\r
25 #define VERSIONHELPERAPI inline bool\r
26 #else\r
27 #define VERSIONHELPERAPI FORCEINLINE BOOL\r
28 #endif // __cplusplus\r
29 \r
30 /* Windows 8/8.1 version numbers, not defined in the Windows 7 SDK. */\r
31 #ifndef _WIN32_WINNT_WIN8\r
32 #define _WIN32_WINNT_WIN8 0x0602\r
33 #endif\r
34 #ifndef _WIN32_WINNT_WINBLUE\r
35 #define _WIN32_WINNT_WINBLUE 0x0603\r
36 #endif\r
37 \r
38 VERSIONHELPERAPI IsWindowsVersionOrGreater(WORD wMajorVersion,\r
39     WORD wMinorVersion, WORD wServicePackMajor) {\r
40     OSVERSIONINFOEXW osVersionInfo;\r
41     DWORDLONG dwlConditionMask = 0;\r
42     ZeroMemory(&osVersionInfo, sizeof(osVersionInfo));\r
43     osVersionInfo.dwOSVersionInfoSize = sizeof(osVersionInfo);\r
44     osVersionInfo.dwMajorVersion = wMajorVersion;\r
45     osVersionInfo.dwMinorVersion = wMinorVersion;\r
46     osVersionInfo.wServicePackMajor = wServicePackMajor;\r
47     VER_SET_CONDITION(dwlConditionMask, VER_MAJORVERSION,\r
48         VER_GREATER_EQUAL);\r
49     VER_SET_CONDITION(dwlConditionMask, VER_MINORVERSION,\r
50         VER_GREATER_EQUAL);\r
51     VER_SET_CONDITION(dwlConditionMask, VER_SERVICEPACKMAJOR,\r
52         VER_GREATER_EQUAL);\r
53     return VerifyVersionInfoW(&osVersionInfo, VER_MAJORVERSION\r
54         | VER_MINORVERSION | VER_SERVICEPACKMAJOR, dwlConditionMask);\r
55 }\r
56 \r
57 VERSIONHELPERAPI IsWindowsXPOrGreater() {\r
58     return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP),\r
59         LOBYTE(_WIN32_WINNT_WINXP), 0);\r
60 }\r
61 \r
62 VERSIONHELPERAPI IsWindowsXPSP1OrGreater() {\r
63     return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP),\r
64         LOBYTE(_WIN32_WINNT_WINXP), 1);\r
65 }\r
66 \r
67 VERSIONHELPERAPI IsWindowsXPSP2OrGreater() {\r
68     return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP),\r
69         LOBYTE(_WIN32_WINNT_WINXP), 2);\r
70 }\r
71 \r
72 VERSIONHELPERAPI IsWindowsXPSP3OrGreater() {\r
73     return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP),\r
74         LOBYTE(_WIN32_WINNT_WINXP), 3);\r
75 }\r
76 \r
77 VERSIONHELPERAPI IsWindowsVistaOrGreater() {\r
78     return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_VISTA),\r
79         LOBYTE(_WIN32_WINNT_VISTA), 0);\r
80 }\r
81 \r
82 VERSIONHELPERAPI IsWindowsVistaSP1OrGreater() {\r
83     return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_VISTA),\r
84         LOBYTE(_WIN32_WINNT_VISTA), 1);\r
85 }\r
86 \r
87 VERSIONHELPERAPI IsWindowsVistaSP2OrGreater() {\r
88     return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_VISTA),\r
89         LOBYTE(_WIN32_WINNT_VISTA), 2);\r
90 }\r
91 \r
92 VERSIONHELPERAPI IsWindows7OrGreater() {\r
93     return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN7),\r
94         LOBYTE(_WIN32_WINNT_WIN7), 0);\r
95 }\r
96 \r
97 VERSIONHELPERAPI IsWindows7SP1OrGreater() {\r
98     return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN7),\r
99         LOBYTE(_WIN32_WINNT_WIN7), 1);\r
100 }\r
101 \r
102 VERSIONHELPERAPI IsWindows8OrGreater() {\r
103     return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN8),\r
104         LOBYTE(_WIN32_WINNT_WIN8), 0);\r
105 }\r
106 \r
107 VERSIONHELPERAPI IsWindows8Point1OrGreater() {\r
108     return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINBLUE),\r
109         LOBYTE(_WIN32_WINNT_WINBLUE), 0);\r
110 }\r
111 \r
112 VERSIONHELPERAPI IsWindowsServer() {\r
113     OSVERSIONINFOEXW osVersionInfo;\r
114     DWORDLONG dwlConditionMask = 0;\r
115     ZeroMemory(&osVersionInfo, sizeof(osVersionInfo));\r
116     osVersionInfo.dwOSVersionInfoSize = sizeof(osVersionInfo);\r
117     osVersionInfo.wProductType = VER_NT_WORKSTATION;\r
118     VER_SET_CONDITION(dwlConditionMask, VER_PRODUCT_TYPE, VER_EQUAL);\r
119     return !VerifyVersionInfoW(&osVersionInfo, VER_PRODUCT_TYPE,\r
120         dwlConditionMask);\r
121 }\r
122 #endif // SG_VERSIONHELPERS_HXX_\r