OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
dark_mode.hpp File Reference
#include "IatHook.hpp"
#include <Windows.h>
#include <Uxtheme.h>
#include <Vssym32.h>
#include <unordered_set>
#include <mutex>
#include <cwchar>
Include dependency graph for dark_mode.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  WINDOWCOMPOSITIONATTRIBDATA

Typedefs

using fnRtlGetNtVersionNumbers = void (WINAPI *)(LPDWORD major, LPDWORD minor, LPDWORD build)
using fnSetWindowCompositionAttribute = BOOL (WINAPI *)(HWND hWnd, WINDOWCOMPOSITIONATTRIBDATA*)
using fnGetDpiForWindow = UINT (WINAPI*)(_In_ HWND hwnd)
using fnGetDpiForSystem = UINT(WINAPI*)()
using fnShouldAppsUseDarkMode = bool (WINAPI *)()
using fnAllowDarkModeForWindow = bool (WINAPI *)(HWND hWnd, bool allow)
using fnAllowDarkModeForApp = bool (WINAPI *)(bool allow)
using fnFlushMenuThemes = void (WINAPI *)()
using fnRefreshImmersiveColorPolicyState = void (WINAPI *)()
using fnIsDarkModeAllowedForWindow = bool (WINAPI *)(HWND hWnd)
using fnGetIsImmersiveColorUsingHighContrast = bool (WINAPI *)(IMMERSIVE_HC_CACHE_MODE mode)
using fnOpenNcThemeData = HTHEME(WINAPI *)(HWND hWnd, LPCWSTR pszClassList)
using fnShouldSystemUseDarkMode = bool (WINAPI *)()
using fnSetPreferredAppMode = PreferredAppMode (WINAPI *)(PreferredAppMode appMode)
using fnIsDarkModeAllowedForApp = bool (WINAPI *)()

Enumerations

enum  IMMERSIVE_HC_CACHE_MODE { IHCM_USE_CACHED_VALUE , IHCM_REFRESH }
enum  PreferredAppMode {
  Default , AllowDark , ForceDark , ForceLight ,
  Max
}
enum  WINDOWCOMPOSITIONATTRIB {
  WCA_UNDEFINED = 0 , WCA_NCRENDERING_ENABLED = 1 , WCA_NCRENDERING_POLICY = 2 , WCA_TRANSITIONS_FORCEDISABLED = 3 ,
  WCA_ALLOW_NCPAINT = 4 , WCA_CAPTION_BUTTON_BOUNDS = 5 , WCA_NONCLIENT_RTL_LAYOUT = 6 , WCA_FORCE_ICONIC_REPRESENTATION = 7 ,
  WCA_EXTENDED_FRAME_BOUNDS = 8 , WCA_HAS_ICONIC_BITMAP = 9 , WCA_THEME_ATTRIBUTES = 10 , WCA_NCRENDERING_EXILED = 11 ,
  WCA_NCADORNMENTINFO = 12 , WCA_EXCLUDED_FROM_LIVEPREVIEW = 13 , WCA_VIDEO_OVERLAY_ACTIVE = 14 , WCA_FORCE_ACTIVEWINDOW_APPEARANCE = 15 ,
  WCA_DISALLOW_PEEK = 16 , WCA_CLOAK = 17 , WCA_CLOAKED = 18 , WCA_ACCENT_POLICY = 19 ,
  WCA_FREEZE_REPRESENTATION = 20 , WCA_EVER_UNCLOAKED = 21 , WCA_VISUAL_OWNER = 22 , WCA_HOLOGRAPHIC = 23 ,
  WCA_EXCLUDED_FROM_DDA = 24 , WCA_PASSIVEUPDATEMODE = 25 , WCA_USEDARKMODECOLORS = 26 , WCA_LAST = 27
}

Functions

bool AllowDarkModeForWindow (HWND hWnd, bool allow)
bool IsHighContrast ()
void RefreshTitleBarThemeColor (HWND hWnd)
bool IsColorSchemeChangeMessage (LPARAM lParam)
bool IsColorSchemeChangeMessage (UINT message, LPARAM lParam)
void AllowDarkModeForApp (bool allow)
void EnableDarkScrollBarForWindowAndChildren (HWND hwnd)
bool IsWindowOrParentUsingDarkScrollBar (HWND hwnd)
void FixDarkScrollBar ()
constexpr bool CheckBuildNumber (DWORD buildNumber)
void InitDarkMode ()

Variables

fnSetWindowCompositionAttribute _SetWindowCompositionAttribute = nullptr
fnGetDpiForWindow _GetDpiForWindow = nullptr
fnGetDpiForSystem _GetDpiForSystem = nullptr
fnShouldAppsUseDarkMode _ShouldAppsUseDarkMode = nullptr
fnAllowDarkModeForWindow _AllowDarkModeForWindow = nullptr
fnAllowDarkModeForApp _AllowDarkModeForApp = nullptr
fnFlushMenuThemes _FlushMenuThemes = nullptr
fnRefreshImmersiveColorPolicyState _RefreshImmersiveColorPolicyState = nullptr
fnIsDarkModeAllowedForWindow _IsDarkModeAllowedForWindow = nullptr
fnGetIsImmersiveColorUsingHighContrast _GetIsImmersiveColorUsingHighContrast = nullptr
fnOpenNcThemeData _OpenNcThemeData = nullptr
fnShouldSystemUseDarkMode _ShouldSystemUseDarkMode = nullptr
fnSetPreferredAppMode _SetPreferredAppMode = nullptr
bool g_darkModeSupported = false
bool g_darkModeEnabled = false
bool g_SystemMenuEnabled = true
DWORD g_buildNumber = 0
std::unordered_set< HWND > g_darkScrollBarWindows
std::mutex g_darkScrollBarMutex

Class Documentation

◆ WINDOWCOMPOSITIONATTRIBDATA

struct WINDOWCOMPOSITIONATTRIBDATA
Class Members
WINDOWCOMPOSITIONATTRIB Attrib
SIZE_T cbData
PVOID pvData

Typedef Documentation

◆ fnAllowDarkModeForApp

using fnAllowDarkModeForApp = bool (WINAPI *)(bool allow)

◆ fnAllowDarkModeForWindow

using fnAllowDarkModeForWindow = bool (WINAPI *)(HWND hWnd, bool allow)

◆ fnFlushMenuThemes

using fnFlushMenuThemes = void (WINAPI *)()

◆ fnGetDpiForSystem

using fnGetDpiForSystem = UINT(WINAPI*)()

◆ fnGetDpiForWindow

using fnGetDpiForWindow = UINT (WINAPI*)(_In_ HWND hwnd)

◆ fnGetIsImmersiveColorUsingHighContrast

◆ fnIsDarkModeAllowedForApp

using fnIsDarkModeAllowedForApp = bool (WINAPI *)()

◆ fnIsDarkModeAllowedForWindow

using fnIsDarkModeAllowedForWindow = bool (WINAPI *)(HWND hWnd)

◆ fnOpenNcThemeData

using fnOpenNcThemeData = HTHEME(WINAPI *)(HWND hWnd, LPCWSTR pszClassList)

◆ fnRefreshImmersiveColorPolicyState

using fnRefreshImmersiveColorPolicyState = void (WINAPI *)()

◆ fnRtlGetNtVersionNumbers

using fnRtlGetNtVersionNumbers = void (WINAPI *)(LPDWORD major, LPDWORD minor, LPDWORD build)

◆ fnSetPreferredAppMode

◆ fnSetWindowCompositionAttribute

using fnSetWindowCompositionAttribute = BOOL (WINAPI *)(HWND hWnd, WINDOWCOMPOSITIONATTRIBDATA*)

◆ fnShouldAppsUseDarkMode

using fnShouldAppsUseDarkMode = bool (WINAPI *)()

◆ fnShouldSystemUseDarkMode

using fnShouldSystemUseDarkMode = bool (WINAPI *)()

Enumeration Type Documentation

◆ IMMERSIVE_HC_CACHE_MODE

Enumerator
IHCM_USE_CACHED_VALUE 
IHCM_REFRESH 
14{
17};
@ IHCM_REFRESH
Definition dark_mode.hpp:16
@ IHCM_USE_CACHED_VALUE
Definition dark_mode.hpp:15

◆ PreferredAppMode

Enumerator
Default 
AllowDark 
ForceDark 
ForceLight 
Max 
21{
22 Default,
26 Max
27};
@ Max
Definition dark_mode.hpp:26
@ ForceLight
Definition dark_mode.hpp:25
@ AllowDark
Definition dark_mode.hpp:23
@ ForceDark
Definition dark_mode.hpp:24
@ Default
Definition dark_mode.hpp:22

◆ WINDOWCOMPOSITIONATTRIB

Enumerator
WCA_UNDEFINED 
WCA_NCRENDERING_ENABLED 
WCA_NCRENDERING_POLICY 
WCA_TRANSITIONS_FORCEDISABLED 
WCA_ALLOW_NCPAINT 
WCA_CAPTION_BUTTON_BOUNDS 
WCA_NONCLIENT_RTL_LAYOUT 
WCA_FORCE_ICONIC_REPRESENTATION 
WCA_EXTENDED_FRAME_BOUNDS 
WCA_HAS_ICONIC_BITMAP 
WCA_THEME_ATTRIBUTES 
WCA_NCRENDERING_EXILED 
WCA_NCADORNMENTINFO 
WCA_EXCLUDED_FROM_LIVEPREVIEW 
WCA_VIDEO_OVERLAY_ACTIVE 
WCA_FORCE_ACTIVEWINDOW_APPEARANCE 
WCA_DISALLOW_PEEK 
WCA_CLOAK 
WCA_CLOAKED 
WCA_ACCENT_POLICY 
WCA_FREEZE_REPRESENTATION 
WCA_EVER_UNCLOAKED 
WCA_VISUAL_OWNER 
WCA_HOLOGRAPHIC 
WCA_EXCLUDED_FROM_DDA 
WCA_PASSIVEUPDATEMODE 
WCA_USEDARKMODECOLORS 
WCA_LAST 
30{
31 WCA_UNDEFINED = 0,
48 WCA_CLOAK = 17,
49 WCA_CLOAKED = 18,
54 WCA_HOLOGRAPHIC = 23,
58 WCA_LAST = 27
59};
@ WCA_EXCLUDED_FROM_LIVEPREVIEW
Definition dark_mode.hpp:44
@ WCA_NCRENDERING_POLICY
Definition dark_mode.hpp:33
@ WCA_CAPTION_BUTTON_BOUNDS
Definition dark_mode.hpp:36
@ WCA_USEDARKMODECOLORS
Definition dark_mode.hpp:57
@ WCA_FORCE_ACTIVEWINDOW_APPEARANCE
Definition dark_mode.hpp:46
@ WCA_HAS_ICONIC_BITMAP
Definition dark_mode.hpp:40
@ WCA_EVER_UNCLOAKED
Definition dark_mode.hpp:52
@ WCA_CLOAKED
Definition dark_mode.hpp:49
@ WCA_NONCLIENT_RTL_LAYOUT
Definition dark_mode.hpp:37
@ WCA_UNDEFINED
Definition dark_mode.hpp:31
@ WCA_NCRENDERING_ENABLED
Definition dark_mode.hpp:32
@ WCA_CLOAK
Definition dark_mode.hpp:48
@ WCA_FORCE_ICONIC_REPRESENTATION
Definition dark_mode.hpp:38
@ WCA_EXTENDED_FRAME_BOUNDS
Definition dark_mode.hpp:39
@ WCA_LAST
Definition dark_mode.hpp:58
@ WCA_VISUAL_OWNER
Definition dark_mode.hpp:53
@ WCA_ALLOW_NCPAINT
Definition dark_mode.hpp:35
@ WCA_DISALLOW_PEEK
Definition dark_mode.hpp:47
@ WCA_FREEZE_REPRESENTATION
Definition dark_mode.hpp:51
@ WCA_NCRENDERING_EXILED
Definition dark_mode.hpp:42
@ WCA_NCADORNMENTINFO
Definition dark_mode.hpp:43
@ WCA_VIDEO_OVERLAY_ACTIVE
Definition dark_mode.hpp:45
@ WCA_TRANSITIONS_FORCEDISABLED
Definition dark_mode.hpp:34
@ WCA_EXCLUDED_FROM_DDA
Definition dark_mode.hpp:55
@ WCA_HOLOGRAPHIC
Definition dark_mode.hpp:54
@ WCA_THEME_ATTRIBUTES
Definition dark_mode.hpp:41
@ WCA_ACCENT_POLICY
Definition dark_mode.hpp:50
@ WCA_PASSIVEUPDATEMODE
Definition dark_mode.hpp:56

Function Documentation

◆ AllowDarkModeForApp()

void AllowDarkModeForApp ( bool allow)
159{
162 else if (_SetPreferredAppMode)
164}
fnSetPreferredAppMode _SetPreferredAppMode
Definition dark_mode.hpp:99
fnAllowDarkModeForApp _AllowDarkModeForApp
Definition dark_mode.hpp:91

References _AllowDarkModeForApp, _SetPreferredAppMode, ForceDark, and ForceLight.

◆ AllowDarkModeForWindow()

bool AllowDarkModeForWindow ( HWND hWnd,
bool allow )
107{
109 return _AllowDarkModeForWindow(hWnd, allow);
110 return false;
111}
bool g_darkModeSupported
Definition dark_mode.hpp:101
fnAllowDarkModeForWindow _AllowDarkModeForWindow
Definition dark_mode.hpp:90

References _AllowDarkModeForWindow, and g_darkModeSupported.

◆ CheckBuildNumber()

bool CheckBuildNumber ( DWORD buildNumber)
constexpr
223{
224 return (buildNumber == 17763 || // 1809
225 buildNumber == 18362 || // 1903
226 buildNumber == 18363 || // 1909
227 buildNumber >= 19041); // Windows 10 any version > 2004 and newer
228}

Referenced by InitDarkMode().

Here is the caller graph for this function:

◆ EnableDarkScrollBarForWindowAndChildren()

void EnableDarkScrollBarForWindowAndChildren ( HWND hwnd)
172{
173 std::lock_guard<std::mutex> lock(g_darkScrollBarMutex);
174 g_darkScrollBarWindows.insert(hwnd);
175}
std::unordered_set< HWND > g_darkScrollBarWindows
Definition dark_mode.hpp:168
std::mutex g_darkScrollBarMutex
Definition dark_mode.hpp:169
@ lock
Definition GLGizmoEmboss.cpp:209

References g_darkScrollBarMutex, and g_darkScrollBarWindows.

◆ FixDarkScrollBar()

void FixDarkScrollBar ( )
193{
194 HMODULE hComctl = LoadLibraryExW(L"comctl32.dll", nullptr, LOAD_LIBRARY_SEARCH_SYSTEM32);
195 if (hComctl)
196 {
197 auto addr = FindDelayLoadThunkInModule(hComctl, "uxtheme.dll", 49); // OpenNcThemeData
198 if (addr)
199 {
200 DWORD oldProtect;
201 if (VirtualProtect(addr, sizeof(IMAGE_THUNK_DATA), PAGE_READWRITE, &oldProtect))
202 {
203 auto MyOpenThemeData = [](HWND hWnd, LPCWSTR classList) -> HTHEME {
204 if (wcscmp(classList, L"ScrollBar") == 0) {
205 hWnd = nullptr;
206 classList = L"Explorer::ScrollBar";
207 }
208 if (wcscmp(classList, L"MENU") == 0) {
209 hWnd = nullptr;
210 classList = L"Explorer::Menu";
211 }
212 return _OpenNcThemeData(hWnd, classList);
213 };
214
215 addr->u1.Function = reinterpret_cast<ULONG_PTR>(static_cast<fnOpenNcThemeData>(MyOpenThemeData));
216 VirtualProtect(addr, sizeof(IMAGE_THUNK_DATA), oldProtect, &oldProtect);
217 }
218 }
219 }
220}
#define L(s)
Definition ExtrusionEntity.cpp:25
PIMAGE_THUNK_DATA FindDelayLoadThunkInModule(void *moduleBase, const char *dllName, const char *funcName)
Definition IatHook.hpp:69
HTHEME(WINAPI *)(HWND hWnd, LPCWSTR pszClassList) fnOpenNcThemeData
Definition dark_mode.hpp:80
fnOpenNcThemeData _OpenNcThemeData
Definition dark_mode.hpp:96

References _OpenNcThemeData, FindDelayLoadThunkInModule(), and L.

Referenced by NppDarkMode::SetDarkMode().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ InitDarkMode()

void InitDarkMode ( )
231{
232 auto RtlGetNtVersionNumbers = reinterpret_cast<fnRtlGetNtVersionNumbers>(GetProcAddress(GetModuleHandleW(L"ntdll.dll"), "RtlGetNtVersionNumbers"));
233 if (RtlGetNtVersionNumbers)
234 {
235 DWORD major, minor;
236 RtlGetNtVersionNumbers(&major, &minor, &g_buildNumber);
237 g_buildNumber &= ~0xF0000000;
238 if (major == 10 && minor == 0 && CheckBuildNumber(g_buildNumber))
239 {
240 HMODULE hUxtheme = LoadLibraryExW(L"uxtheme.dll", nullptr, LOAD_LIBRARY_SEARCH_SYSTEM32);
241 if (hUxtheme)
242 {
243 _OpenNcThemeData = reinterpret_cast<fnOpenNcThemeData>(GetProcAddress(hUxtheme, MAKEINTRESOURCEA(49)));
244 _RefreshImmersiveColorPolicyState = reinterpret_cast<fnRefreshImmersiveColorPolicyState>(GetProcAddress(hUxtheme, MAKEINTRESOURCEA(104)));
245 _GetIsImmersiveColorUsingHighContrast = reinterpret_cast<fnGetIsImmersiveColorUsingHighContrast>(GetProcAddress(hUxtheme, MAKEINTRESOURCEA(106)));
246 _ShouldAppsUseDarkMode = reinterpret_cast<fnShouldAppsUseDarkMode>(GetProcAddress(hUxtheme, MAKEINTRESOURCEA(132)));
247 _AllowDarkModeForWindow = reinterpret_cast<fnAllowDarkModeForWindow>(GetProcAddress(hUxtheme, MAKEINTRESOURCEA(133)));
248
249 auto ord135 = GetProcAddress(hUxtheme, MAKEINTRESOURCEA(135));
250 if (g_buildNumber < 18362)
251 _AllowDarkModeForApp = reinterpret_cast<fnAllowDarkModeForApp>(ord135);
252 else
253 _SetPreferredAppMode = reinterpret_cast<fnSetPreferredAppMode>(ord135);
254
255 _FlushMenuThemes = reinterpret_cast<fnFlushMenuThemes>(GetProcAddress(hUxtheme, MAKEINTRESOURCEA(136)));
256 _IsDarkModeAllowedForWindow = reinterpret_cast<fnIsDarkModeAllowedForWindow>(GetProcAddress(hUxtheme, MAKEINTRESOURCEA(137)));
257
258 _SetWindowCompositionAttribute = reinterpret_cast<fnSetWindowCompositionAttribute>(GetProcAddress(GetModuleHandleW(L"user32.dll"), "SetWindowCompositionAttribute"));
259
260 _GetDpiForWindow = reinterpret_cast<fnGetDpiForWindow>(GetProcAddress(GetModuleHandleW(L"user32.dll"), "GetDpiForWindow"));
261 _GetDpiForSystem = reinterpret_cast<fnGetDpiForSystem>(GetProcAddress(GetModuleHandleW(L"user32.dll"), "GetDpiForSystem"));
262
263 if (_OpenNcThemeData &&
270 {
271 g_darkModeSupported = true;
272 }
273 }
274 }
275 }
276}
bool(WINAPI *)(bool allow) fnAllowDarkModeForApp
Definition dark_mode.hpp:75
bool(WINAPI *)(IMMERSIVE_HC_CACHE_MODE mode) fnGetIsImmersiveColorUsingHighContrast
Definition dark_mode.hpp:79
UINT(WINAPI *)() fnGetDpiForSystem
Definition dark_mode.hpp:71
void(WINAPI *)() fnRefreshImmersiveColorPolicyState
Definition dark_mode.hpp:77
fnRefreshImmersiveColorPolicyState _RefreshImmersiveColorPolicyState
Definition dark_mode.hpp:93
DWORD g_buildNumber
Definition dark_mode.hpp:104
bool(WINAPI *)(HWND hWnd) fnIsDarkModeAllowedForWindow
Definition dark_mode.hpp:78
fnIsDarkModeAllowedForWindow _IsDarkModeAllowedForWindow
Definition dark_mode.hpp:94
fnSetWindowCompositionAttribute _SetWindowCompositionAttribute
Definition dark_mode.hpp:86
UINT(WINAPI *)(_In_ HWND hwnd) fnGetDpiForWindow
Definition dark_mode.hpp:70
constexpr bool CheckBuildNumber(DWORD buildNumber)
Definition dark_mode.hpp:222
PreferredAppMode(WINAPI *)(PreferredAppMode appMode) fnSetPreferredAppMode
Definition dark_mode.hpp:83
fnShouldAppsUseDarkMode _ShouldAppsUseDarkMode
Definition dark_mode.hpp:89
bool(WINAPI *)(HWND hWnd, bool allow) fnAllowDarkModeForWindow
Definition dark_mode.hpp:74
fnGetIsImmersiveColorUsingHighContrast _GetIsImmersiveColorUsingHighContrast
Definition dark_mode.hpp:95
fnGetDpiForWindow _GetDpiForWindow
Definition dark_mode.hpp:87
fnFlushMenuThemes _FlushMenuThemes
Definition dark_mode.hpp:92
void(WINAPI *)(LPDWORD major, LPDWORD minor, LPDWORD build) fnRtlGetNtVersionNumbers
Definition dark_mode.hpp:68
void(WINAPI *)() fnFlushMenuThemes
Definition dark_mode.hpp:76
BOOL(WINAPI *)(HWND hWnd, WINDOWCOMPOSITIONATTRIBDATA *) fnSetWindowCompositionAttribute
Definition dark_mode.hpp:69
bool(WINAPI *)() fnShouldAppsUseDarkMode
Definition dark_mode.hpp:73
fnGetDpiForSystem _GetDpiForSystem
Definition dark_mode.hpp:88

References _AllowDarkModeForApp, _AllowDarkModeForWindow, _FlushMenuThemes, _GetDpiForSystem, _GetDpiForWindow, _GetIsImmersiveColorUsingHighContrast, _IsDarkModeAllowedForWindow, _OpenNcThemeData, _RefreshImmersiveColorPolicyState, _SetPreferredAppMode, _SetWindowCompositionAttribute, _ShouldAppsUseDarkMode, CheckBuildNumber(), g_buildNumber, g_darkModeSupported, and L.

Referenced by NppDarkMode::InitDarkMode().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ IsColorSchemeChangeMessage() [1/2]

bool IsColorSchemeChangeMessage ( LPARAM lParam)
140{
141 bool is = false;
142 if (lParam && (0 == lstrcmpi(reinterpret_cast<LPCWCH>(lParam), L"ImmersiveColorSet")))
143 {
145 is = true;
146 }
148 return is;
149}

References _GetIsImmersiveColorUsingHighContrast, _RefreshImmersiveColorPolicyState, IHCM_REFRESH, and L.

Referenced by IsColorSchemeChangeMessage(), and NppDarkMode::OnSettingChange().

Here is the caller graph for this function:

◆ IsColorSchemeChangeMessage() [2/2]

bool IsColorSchemeChangeMessage ( UINT message,
LPARAM lParam )
152{
153 if (message == WM_SETTINGCHANGE)
154 return IsColorSchemeChangeMessage(lParam);
155 return false;
156}
bool IsColorSchemeChangeMessage(LPARAM lParam)
Definition dark_mode.hpp:139

References IsColorSchemeChangeMessage().

Here is the call graph for this function:

◆ IsHighContrast()

bool IsHighContrast ( )
114{
115 HIGHCONTRASTW highContrast = { sizeof(highContrast) };
116 if (SystemParametersInfoW(SPI_GETHIGHCONTRAST, sizeof(highContrast), &highContrast, FALSE))
117 return highContrast.dwFlags & HCF_HIGHCONTRASTON;
118 return false;
119}

Referenced by NppDarkMode::OnSettingChange(), and RefreshTitleBarThemeColor().

Here is the caller graph for this function:

◆ IsWindowOrParentUsingDarkScrollBar()

bool IsWindowOrParentUsingDarkScrollBar ( HWND hwnd)
178{
179 HWND hwndRoot = GetAncestor(hwnd, GA_ROOT);
180
181 std::lock_guard<std::mutex> lock(g_darkScrollBarMutex);
182 if (g_darkScrollBarWindows.count(hwnd)) {
183 return true;
184 }
185 if (hwnd != hwndRoot && g_darkScrollBarWindows.count(hwndRoot)) {
186 return true;
187 }
188
189 return false;
190}

References g_darkScrollBarMutex, and g_darkScrollBarWindows.

◆ RefreshTitleBarThemeColor()

void RefreshTitleBarThemeColor ( HWND hWnd)
122{
123 BOOL dark = FALSE;
124 if (_IsDarkModeAllowedForWindow(hWnd) &&
127 {
128 dark = TRUE;
129 }
130 if (g_buildNumber < 18362)
131 SetPropW(hWnd, L"UseImmersiveDarkModeColors", reinterpret_cast<HANDLE>(static_cast<INT_PTR>(dark)));
133 {
134 WINDOWCOMPOSITIONATTRIBDATA data = { WCA_USEDARKMODECOLORS, &dark, sizeof(dark) };
136 }
137}
bool IsHighContrast()
Definition dark_mode.hpp:113
Definition dark_mode.hpp:62

References _IsDarkModeAllowedForWindow, _SetWindowCompositionAttribute, _ShouldAppsUseDarkMode, g_buildNumber, IsHighContrast(), L, and WCA_USEDARKMODECOLORS.

Here is the call graph for this function:

Variable Documentation

◆ _AllowDarkModeForApp

fnAllowDarkModeForApp _AllowDarkModeForApp = nullptr

◆ _AllowDarkModeForWindow

◆ _FlushMenuThemes

fnFlushMenuThemes _FlushMenuThemes = nullptr

◆ _GetDpiForSystem

fnGetDpiForSystem _GetDpiForSystem = nullptr

◆ _GetDpiForWindow

fnGetDpiForWindow _GetDpiForWindow = nullptr

◆ _GetIsImmersiveColorUsingHighContrast

fnGetIsImmersiveColorUsingHighContrast _GetIsImmersiveColorUsingHighContrast = nullptr

◆ _IsDarkModeAllowedForWindow

fnIsDarkModeAllowedForWindow _IsDarkModeAllowedForWindow = nullptr

◆ _OpenNcThemeData

fnOpenNcThemeData _OpenNcThemeData = nullptr

Referenced by FixDarkScrollBar(), and InitDarkMode().

◆ _RefreshImmersiveColorPolicyState

fnRefreshImmersiveColorPolicyState _RefreshImmersiveColorPolicyState = nullptr

◆ _SetPreferredAppMode

fnSetPreferredAppMode _SetPreferredAppMode = nullptr

◆ _SetWindowCompositionAttribute

fnSetWindowCompositionAttribute _SetWindowCompositionAttribute = nullptr

◆ _ShouldAppsUseDarkMode

◆ _ShouldSystemUseDarkMode

fnShouldSystemUseDarkMode _ShouldSystemUseDarkMode = nullptr

◆ g_buildNumber

DWORD g_buildNumber = 0

◆ g_darkModeEnabled

bool g_darkModeEnabled = false

◆ g_darkModeSupported

bool g_darkModeSupported = false

◆ g_darkScrollBarMutex

std::mutex g_darkScrollBarMutex

◆ g_darkScrollBarWindows

std::unordered_set<HWND> g_darkScrollBarWindows

◆ g_SystemMenuEnabled