[英]Notification/subscription method for Windows 10 theme change
正如 yolu 可能已经注意到的那样,MS 在 Windows 10 中引入了一种现代的“主题”,关于基本的操作系统元素,如开始菜单和任务栏。 对于较新的版本,您可以选择“浅色”主题作为默认黑色主题的替代方案。
我想知道是否有一个 API 或钩子可以优雅地(更重要的是)有效地实时检查主题更改(在 MS 文档中没有找到任何关于此的内容,但这些 gem 经常隐藏在那里,恕我直言)。
特定问题:当您有一个带有系统托盘图标的桌面应用程序时,您很可能将其设计为明亮的。 几乎所有现代 Windows 图标都具有这种风格(简单和白色,在黑色任务栏上产生良好的可读性)。 现在,您可以为浅色主题提供深色样式的不同版本,但是如何注意何时即时应用它?
我知道 HCU (Software/Microsoft/Windows/CurrentVersion/Themes/Personalize) 下的注册表项,这是我现在正在使用的。 然而,盲目地每 x 毫秒检查一次变化似乎很尴尬。
如果没有这样的东西可用,我也很高兴听到一些关于更有效地实现这种检查的想法。
方法一:使用RegNotifyChangeKeyValue
通知调用者有关指定注册表项的属性或内容的更改。
方法 2:使用WM_SETTINGCHANGE
应用程序在更改系统参数时应将 WM_SETTINGCHANGE 发送到所有顶级窗口。 (此消息不能直接发送到窗口。)要将 WM_SETTINGCHANGE 消息发送到所有顶级窗口,请使用将 hwnd 参数设置为 HWND_BROADCAST 的 SendMessageTimeout 函数。
我倾向于使用第二种方法,我已经尝试过,并且能够成功地工作。
最小代码示例:
case WM_SETTINGCHANGE:
{
if (!lstrcmp(LPCTSTR(lParam), L"ImmersiveColorSet"))
{
//theme has been changed
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.