windows - 颜色管理 : Monitor profile changed notification for Windows?

标签 windows winapi wcs color-management

简短版:

我正在寻找与 Cocoa 等价的 Windows API – windowDidChangeBackingProperties: NSWindowDelegate 中的通知当窗口的色彩空间发生变化时调用的协议(protocol)(当它被移动到另一个显示器或当用户更改显示器配置文件时)。

有谁知道 Windows 上的等效 API 是什么?

长版:

我正在开发一个完全颜色管理的应用程序。因此,当显示器的颜色配置文件更改或应用程序窗口移动到不同的屏幕时,我需要得到通知。在 Mac 端这很简单,我只是实现了 – windowDidChangeBackingProperties:我的窗口委托(delegate)的方法,每当用户将窗口拖到另一个监视器或更改全局监视器配置文件时,我都会收到通知。简单易行。在 Windows 端,我不知道如何获取这些通知。

目前我正在使用 GetICMProfile() 获取监视器配置文件WCS ( Windows Color System ) 在应用程序启动时起作用。当监视器配置文件更改时,我需要一些通知。

如何在 Windows 上接收监视器配置文件更改通知?

当应用程序窗口从一台显示器移动到另一台显示器时,通知会加分。我希望有一个通知,但如果没有,我可能可以通过监 Windows 口移动来弄清楚。

最佳答案

一种可能的解决方案是在某些特定消息(WM_SHOWWINDOWWM_ACTIVATE)中使用 GetICMProfile() 查询颜色配置文件WM_EXITSIZEMOVE) 然后比较配置文件名是否已更改(如果文件名已更改,则当前配置文件也已更改)。

这很遗憾,但看起来当我们从显示设置更改颜色配置文件时 HWND 没有收到消息,因此 WM_ACTIVE 部分解决了那个问题(单击/激活窗口时,我们可以检查颜色配置文件是否已更改)。

关于windows - 颜色管理 : Monitor profile changed notification for Windows?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25298607/

相关文章:

c# - 提取 Windows 文件属性(自定义属性)C#

Java - URI is not hierarchical 错误仅出现在导出的 JAR 中,而不出现在 Eclipse 中

java - 如何为 GNU/Linux 设置正确的字符编码

c++ - 从 ProPhoto RGB 到显示器配置文件的颜色转换

PHP 除法返回不同的结果 (Linux/Windows)

c++ - 捕获网络状态变化事件

c - 如何检查与网络驱动器的连接?

c++ - 应该为传感器读数的串行通信选择什么缓冲区大小?

c# - 我可以在 C# 进程中使用 SetErrorMode 吗?