Skip to content

Commit 241cb92

Browse files
committed
add VersionHelper.h
1 parent e9668fb commit 241cb92

7 files changed

+612
-45
lines changed

.gitmodules

+3
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,6 @@
77
[submodule "LineNumEdit"]
88
path = LineNumEdit
99
url = https://github.com/katahiromz/LineNumEdit
10+
[submodule "WonSetThreadUILanguage"]
11+
path = WonSetThreadUILanguage
12+
url = https://github.com/katahiromz/WonSetThreadUILanguage.git

WonSetThreadUILanguage

Submodule WonSetThreadUILanguage added at 45a5778

src/CMakeLists.txt

+3
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ cmake_policy(SET CMP0003 NEW)
88
# EGA
99
subdirs(../EGA)
1010

11+
# include directories
12+
include_directories(.)
13+
1114
# libRisohEditor.a
1215
add_library(libRisohEditor STATIC
1316
AccelRes.cpp

src/RisohEditor.hpp

+1-45
Original file line numberDiff line numberDiff line change
@@ -53,51 +53,7 @@
5353

5454
INT LogMessageBoxW(HWND hwnd, LPCWSTR text, LPCWSTR title, UINT uType);
5555

56-
inline BOOL IsWindowsVistaOrLater(VOID)
57-
{
58-
OSVERSIONINFOW osver = { sizeof(osver) };
59-
return (GetVersionExW(&osver) && osver.dwMajorVersion >= 6);
60-
}
61-
62-
static inline LANGID RE_GetThreadUILanguage()
63-
{
64-
typedef LANGID (WINAPI *FN_GetThreadUILanguage)(VOID);
65-
static FN_GetThreadUILanguage s_fn = NULL;
66-
67-
if (IsWindowsVistaOrLater())
68-
{
69-
if (!s_fn)
70-
s_fn =
71-
reinterpret_cast<FN_GetThreadUILanguage>(GetProcAddress(GetModuleHandleA("kernel32"), "GetThreadUILanguage"));
72-
if (s_fn)
73-
return (*s_fn)();
74-
}
75-
76-
return LANGIDFROMLCID(GetThreadLocale());
77-
}
78-
#undef GetThreadUILanguage
79-
#define GetThreadUILanguage RE_GetThreadUILanguage
80-
81-
static inline LANGID RE_SetThreadUILanguage(LANGID LangID)
82-
{
83-
typedef LANGID (WINAPI *FN_SetThreadUILanguage)(LANGID);
84-
static FN_SetThreadUILanguage s_fn = NULL;
85-
86-
if (IsWindowsVistaOrLater())
87-
{
88-
if (!s_fn)
89-
s_fn =
90-
reinterpret_cast<FN_SetThreadUILanguage>(GetProcAddress(GetModuleHandleA("kernel32"), "SetThreadUILanguage"));
91-
if (s_fn)
92-
return (*s_fn)(LangID);
93-
}
94-
95-
if (SetThreadLocale(MAKELCID(LangID, SORT_DEFAULT)))
96-
return LangID;
97-
return 0;
98-
}
99-
#undef SetThreadUILanguage
100-
#define SetThreadUILanguage RE_SetThreadUILanguage
56+
#include "../WonSetThreadUILanguage/WonSetThreadUILanguage.h"
10157

10258
#include "resource.h"
10359
#include "MWindowBase.hpp"

src/VersionHelpers.h

+138
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
/******************************************************************
2+
* *
3+
* VersionHelpers.h -- This module defines helper functions to *
4+
* promote version check with proper *
5+
* comparisons. *
6+
* *
7+
* Copyright (c) Microsoft Corp. All rights reserved. *
8+
* *
9+
******************************************************************/
10+
#ifndef _versionhelpers_H_INCLUDED_
11+
#define _versionhelpers_H_INCLUDED_
12+
13+
#include <winapifamily.h>
14+
15+
#ifdef _MSC_VER
16+
#pragma once
17+
#endif // _MSC_VER
18+
19+
#pragma region Application Family
20+
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
21+
22+
#include <specstrings.h> // for _In_, etc.
23+
24+
#if !defined(__midl) && !defined(SORTPP_PASS)
25+
26+
#if (NTDDI_VERSION >= NTDDI_WINXP)
27+
28+
#ifdef __cplusplus
29+
30+
#define VERSIONHELPERAPI inline bool
31+
32+
#else // __cplusplus
33+
34+
#define VERSIONHELPERAPI FORCEINLINE BOOL
35+
36+
#endif // __cplusplus
37+
38+
VERSIONHELPERAPI
39+
IsWindowsVersionOrGreater(WORD wMajorVersion, WORD wMinorVersion, WORD wServicePackMajor)
40+
{
41+
OSVERSIONINFOEXW osvi = { sizeof(osvi), 0, 0, 0, 0, {0}, 0, 0 };
42+
DWORDLONG const dwlConditionMask = VerSetConditionMask(
43+
VerSetConditionMask(
44+
VerSetConditionMask(
45+
0, VER_MAJORVERSION, VER_GREATER_EQUAL),
46+
VER_MINORVERSION, VER_GREATER_EQUAL),
47+
VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL);
48+
49+
osvi.dwMajorVersion = wMajorVersion;
50+
osvi.dwMinorVersion = wMinorVersion;
51+
osvi.wServicePackMajor = wServicePackMajor;
52+
53+
return VerifyVersionInfoW(&osvi, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR, dwlConditionMask) != FALSE;
54+
}
55+
56+
VERSIONHELPERAPI
57+
IsWindowsXPOrGreater()
58+
{
59+
return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 0);
60+
}
61+
62+
VERSIONHELPERAPI
63+
IsWindowsXPSP1OrGreater()
64+
{
65+
return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 1);
66+
}
67+
68+
VERSIONHELPERAPI
69+
IsWindowsXPSP2OrGreater()
70+
{
71+
return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 2);
72+
}
73+
74+
VERSIONHELPERAPI
75+
IsWindowsXPSP3OrGreater()
76+
{
77+
return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 3);
78+
}
79+
80+
VERSIONHELPERAPI
81+
IsWindowsVistaOrGreater()
82+
{
83+
return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_VISTA), LOBYTE(_WIN32_WINNT_VISTA), 0);
84+
}
85+
86+
VERSIONHELPERAPI
87+
IsWindowsVistaSP1OrGreater()
88+
{
89+
return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_VISTA), LOBYTE(_WIN32_WINNT_VISTA), 1);
90+
}
91+
92+
VERSIONHELPERAPI
93+
IsWindowsVistaSP2OrGreater()
94+
{
95+
return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_VISTA), LOBYTE(_WIN32_WINNT_VISTA), 2);
96+
}
97+
98+
VERSIONHELPERAPI
99+
IsWindows7OrGreater()
100+
{
101+
return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN7), LOBYTE(_WIN32_WINNT_WIN7), 0);
102+
}
103+
104+
VERSIONHELPERAPI
105+
IsWindows7SP1OrGreater()
106+
{
107+
return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN7), LOBYTE(_WIN32_WINNT_WIN7), 1);
108+
}
109+
110+
VERSIONHELPERAPI
111+
IsWindows8OrGreater()
112+
{
113+
return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN8), LOBYTE(_WIN32_WINNT_WIN8), 0);
114+
}
115+
116+
VERSIONHELPERAPI
117+
IsWindows8Point1OrGreater()
118+
{
119+
return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINBLUE), LOBYTE(_WIN32_WINNT_WINBLUE), 0);
120+
}
121+
122+
VERSIONHELPERAPI
123+
IsWindowsServer()
124+
{
125+
OSVERSIONINFOEXW osvi = { sizeof(osvi), 0, 0, 0, 0, {0}, 0, 0, 0, VER_NT_WORKSTATION };
126+
DWORDLONG const dwlConditionMask = VerSetConditionMask( 0, VER_PRODUCT_TYPE, VER_EQUAL );
127+
128+
return !VerifyVersionInfoW(&osvi, VER_PRODUCT_TYPE, dwlConditionMask);
129+
}
130+
131+
#endif // NTDDI_VERSION
132+
133+
#endif // defined(__midl)
134+
135+
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
136+
#pragma endregion
137+
138+
#endif // _VERSIONHELPERS_H_INCLUDED_

0 commit comments

Comments
 (0)