OSDN Git Service

resource.h: Add IDS_PLUGIN_DESCRIPTION*
[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 wServicePack = 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_SERVICEPACKMAJOR, VER_GREATER_EQUAL );
23
24         OSVERSIONINFOEXW osvi;
25         ::ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
26         osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
27         osvi.dwMajorVersion = HIBYTE(wVersion);
28         osvi.dwMinorVersion = LOBYTE(wVersion);
29         osvi.wServicePackMajor = wServicePack;
30
31         return !!VerifyVersionInfoW(&osvi, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR, dwlConditionMask);
32 }
33
34
35 inline bool
36 IsWin7_OrGreater()
37 {
38     return IsWinVer_OrGreater( _WIN32_WINNT_WIN7 );
39 }
40
41 inline bool
42 IsVista_OrGreater()
43 {
44     return IsWinVer_OrGreater( _WIN32_WINNT_VISTA );
45 }