OSDN Git Service

Shell Extension for Windows 11 or later (5)
[winmerge-jp/winmerge-jp.git] / Src / Win_VersionHelper.h
1 /** 
2  * @file  Win_VersionHelper.h
3  *
4  * @brief Defines quick-and-dirty runtime Windows version checking.
5
6  * All we need in WinMerge is `IsWin7_OrGreater()`
7  * But other possibilities (and slightly different implementation) can be seen in ...
8  *              'C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\VersionHelpers.h'
9  *
10  */
11
12 #pragma once
13
14 #include <windows.h>
15
16 inline bool
17 IsWinVer_OrGreater(WORD wVersion, WORD wBuildNumber = 0)
18 {
19         DWORDLONG dwlConditionMask = 0; 
20         VER_SET_CONDITION( dwlConditionMask, VER_MAJORVERSION, VER_GREATER_EQUAL );
21         VER_SET_CONDITION( dwlConditionMask, VER_MINORVERSION, VER_GREATER_EQUAL );
22         VER_SET_CONDITION( dwlConditionMask, VER_BUILDNUMBER, VER_GREATER_EQUAL );
23
24         OSVERSIONINFOEXW osvi{ sizeof(OSVERSIONINFOEX) };
25         osvi.dwMajorVersion = HIBYTE(wVersion);
26         osvi.dwMinorVersion = LOBYTE(wVersion);
27         osvi.dwBuildNumber = wBuildNumber;
28
29         return !!VerifyVersionInfoW(&osvi, VER_MAJORVERSION | VER_MINORVERSION | VER_BUILDNUMBER, dwlConditionMask);
30 }
31
32 inline bool
33 IsWin11_OrGreater()
34 {
35         return IsWinVer_OrGreater( 0x0a00, 0 );
36 }
37
38 inline bool
39 IsWin7_OrGreater()
40 {
41     return IsWinVer_OrGreater( _WIN32_WINNT_WIN7 );
42 }
43
44 inline bool
45 IsVista_OrGreater()
46 {
47     return IsWinVer_OrGreater( _WIN32_WINNT_VISTA );
48 }