mirror of
https://github.com/rizonesoft/Notepad3.git
synced 2026-06-14 21:09:05 +08:00
+chg: remove the max win version check for undocumented DarkMode UxTheme methods
(allow new Windows Insider versions, with risk of crash on proc adr change)
This commit is contained in:
parent
5f60077177
commit
96a48bd829
@ -62,56 +62,32 @@ DWORD const kSystemLibraryLoadFlags = (IsWindows8Point1OrGreater() ||
|
||||
|
||||
// ============================================================================
|
||||
|
||||
// https://docs.microsoft.com/en-us/windows-insider/flight-hub/
|
||||
// https://docs.microsoft.com/en-US/windows-insider/active-dev-branch
|
||||
|
||||
constexpr bool CheckBuildNumber(DWORD major, DWORD minor, DWORD buildNumber)
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
static bool CheckLoadLibrary(DWORD major, DWORD minor, DWORD buildNumber)
|
||||
{
|
||||
// ignore "minor" build number
|
||||
UNREFERENCED_PARAMETER(minor);
|
||||
|
||||
switch (major) {
|
||||
if (major < 10 || buildNumber < 17763) // Win10 v1809 (released)
|
||||
return false; // NOT WORKING
|
||||
|
||||
// --- Win10 ---
|
||||
case 10: {
|
||||
switch (buildNumber) {
|
||||
case 17763: // Win10 v1809 (released)
|
||||
case 18362: // Win10 v1903 (released)
|
||||
case 18363: // Win10 v1909 (released)
|
||||
case 19041: // Win10 v2004 (released)
|
||||
case 19042: // Win10 v20H2 (released)
|
||||
case 19043: // Win10 v21H1 (released)
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
// keep reentrant for (!)
|
||||
static bool bUxThemeDllLoaded = false;
|
||||
|
||||
if (!bUxThemeDllLoaded) {
|
||||
__try {
|
||||
HRESULT const res = __HrLoadAllImportsForDll("UxTheme.dll"); // Case sensitive
|
||||
bUxThemeDllLoaded = (res == NO_ERROR);
|
||||
}
|
||||
} //[fallthrough]
|
||||
|
||||
// Win10 Insider Preview may have valid higher build numbers on major = 10
|
||||
|
||||
// --- Win11 ---
|
||||
case 11: {
|
||||
switch (buildNumber) {
|
||||
case 22000: // Win11 v21H2 (released) [2021-10-04]
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
__except (GetExceptionCode() == VcppException(ERROR_SEVERITY_ERROR, ERROR_PROC_NOT_FOUND) ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
|
||||
bUxThemeDllLoaded = false;
|
||||
}
|
||||
} break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// Insider Dev and Preview Channels (tested but NOT released Win versions)
|
||||
|
||||
if (buildNumber <= 21999) // Win10 v21H2 [2021-05-21] - WIN10 Insider future will not change this ???
|
||||
return true;
|
||||
else if (buildNumber >= 22000 && buildNumber <= 22471) // Win11 v21H2 [2021-06-28]
|
||||
return true;
|
||||
|
||||
// unknown, not tested if working with these version(s) :-O
|
||||
// in doubt vote for not supported
|
||||
return false;
|
||||
return bUxThemeDllLoaded;
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
@ -365,27 +341,13 @@ static void FixDarkScrollBar(bool bDarkMode)
|
||||
|
||||
extern "C" void SetDarkMode(bool bEnableDarkMode)
|
||||
{
|
||||
// keep reentrant (!)
|
||||
static bool bUxThemeDllLoaded = false;
|
||||
|
||||
s_UserSetDarkMode = bEnableDarkMode;
|
||||
|
||||
DWORD major, minor;
|
||||
DWORD const buildNumber = GetWindowsBuildNumber(&major, &minor);
|
||||
if (buildNumber) {
|
||||
// undocumented function addresses are only valid for this WinVer build numbers
|
||||
if (CheckBuildNumber(major, minor, buildNumber)) {
|
||||
if (!bUxThemeDllLoaded) {
|
||||
__try {
|
||||
__HrLoadAllImportsForDll("UxTheme.dll"); // Case sensitive
|
||||
bUxThemeDllLoaded = true;
|
||||
} __except (GetExceptionCode() == VcppException(ERROR_SEVERITY_ERROR, ERROR_PROC_NOT_FOUND) ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
|
||||
bUxThemeDllLoaded = false;
|
||||
}
|
||||
if (!bUxThemeDllLoaded) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (CheckLoadLibrary(major, minor, buildNumber)) {
|
||||
|
||||
AllowDarkModeForApp(s_UserSetDarkMode);
|
||||
|
||||
|
||||
@ -1,3 +1,14 @@
|
||||
// ----------------------------------------------------------------------------
|
||||
// Windows 10 1903, aka 18362, broke the API.
|
||||
// The function at ordinal 135 is AllowDarkModeForApp before,
|
||||
// and SetPreferredAppMode after 1903. It also broke ShouldAppsUseDarkMode,
|
||||
// which always return TRUE(actually, random runtime not zero) after 1903.
|
||||
//
|
||||
// Before 1903, BOOL __stdcall AllowDarkModeForApp(BOOL) only accepts TRUE or FALSE.
|
||||
// TRUE means dark mode is allowed and vice versa.
|
||||
// After 1903, PreferredMode __stdcall SetPreferredAppMode(PreferredMode) accepts
|
||||
// 4 valid value : Default, AllowDark, ForceDark, ForceLight.
|
||||
//
|
||||
extern "C" {
|
||||
// 1809 17763
|
||||
void __stdcall ShouldAppsUseDarkMode() {} // ordinal 132
|
||||
|
||||
Loading…
Reference in New Issue
Block a user