繁体   English   中英

Windows 10 主题更改的通知/订阅方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM