通过注册表方案可以在应用程序启动时获取到系统主题。
但观察那些 UWP 程序,或者一些 Win32 程序,它们能在运行期间动态的根据系统设置切换应用主题!
根据一些参考资料,Windows 会在切换应用主题时向窗口发送一个事件,只要捕获这个事件,就可以做到感知系统色转变了。
WndProc
窗口事件都在 WndProc[1] 中处理,所以想要获取窗口事件就需要挂钩子。
2020年6月15日大约 1 分钟
通过注册表方案可以在应用程序启动时获取到系统主题。
但观察那些 UWP 程序,或者一些 Win32 程序,它们能在运行期间动态的根据系统设置切换应用主题!
根据一些参考资料,Windows 会在切换应用主题时向窗口发送一个事件,只要捕获这个事件,就可以做到感知系统色转变了。
窗口事件都在 WndProc[1] 中处理,所以想要获取窗口事件就需要挂钩子。
系统强调色可通过 DwmGetColorizationColor [1] 实现
通过访问注册表实现
if (Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Themes\Personalize")?.GetValue("AppsUseLightTheme") is not int or > 0)
{
// 浅色模式
}
else
{
// 深色模式
}