winapi - Windows 10 主题更改的通知/订阅方法
问题描述
正如 yolu 可能已经注意到的那样,MS 在 Windows 10 中引入了一种现代的“主题”,涉及开始菜单和任务栏等基本操作系统元素。对于较新的版本,您可以选择“浅色”主题作为默认黑色主题的替代品。
我想知道是否有一个 API 或钩子可以优雅地(更重要的是)有效地实时检查主题更改(在 MS 文档中没有找到任何关于此的内容,但这些宝石通常很隐蔽,恕我直言)。
具体问题:当您有一个带有系统托盘图标的桌面应用程序时,您很有可能将其设计为明亮的。几乎所有现代 Windows 图标都具有这种风格(简单和白色,在黑色任务栏上产生良好的可读性)。现在您可以为浅色主题提供更暗风格的不同版本,但如何注意何时应用它呢?
我知道我现在正在使用的 HCU (Software/Microsoft/Windows/CurrentVersion/Themes/Personalize) 下的注册表项。但是,每 x 毫秒盲目检查一次更改似乎很尴尬。
如果没有这样的东西可用,我也很高兴听到一些关于更有效地实施这种检查的想法。
解决方案
方法一:使用RegNotifyChangeKeyValue
通知调用者有关指定注册表项的属性或内容的更改。
方法 2:使用WM_SETTINGCHANGE
应用程序在更改系统参数时应将 WM_SETTINGCHANGE 发送到所有顶级窗口。(此消息不能直接发送到窗口。)要将 WM_SETTINGCHANGE 消息发送到所有顶级窗口,请使用将 hwnd 参数设置为 HWND_BROADCAST 的 SendMessageTimeout 函数。
我倾向于使用第二种方法,我尝试过,并且已经能够成功工作。
最小代码示例:</p>
case WM_SETTINGCHANGE:
{
if (!lstrcmp(LPCTSTR(lParam), L"ImmersiveColorSet"))
{
//theme has been changed
}
}
推荐阅读
- wso2 - 如何在 WSO2 IS 5.9.0 的 deployment.toml 中设置 max_session_count 变量?
- postgresql - 菜鸟问题 - 如何将 PgAdmin 连接到预构建的 sql 文档?
- c++ - 如何将向量名称视为数组名称?
- javascript - 如何获得丢失的坐标以使我的线垂直于另一条线?
- python - 使用 python 在 AWS Lambda 中转置 CSV 文件
- php - Symfony Doctrine - 选择具有特定角色的用户
- javascript - 并行运行主任务和顺序/依赖的子任务
- tensorflow - GCP 和 TPU,experimental_connect_to_cluster 没有响应
- java - 在 Kotlin 项目中使用 .jar java 库的步骤
- npm - 在 Visual Studio 项目的构建后事件中运行 npm install