使用 Windows 电源管理 API 调暗显示器

Posted

技术标签:

【中文标题】使用 Windows 电源管理 API 调暗显示器【英文标题】:Using Windows Power Management API to dim monitor 【发布时间】:2013-01-28 16:44:02 【问题描述】:

我正在尝试做一些看起来很简单的事情,我只是想让我的程序能够在某些条件下调整显示器亮度。因此,我查看了 Power Management API 的窗口,发现了一些似乎对我有用的东西。我整理的代码的核心(基本上,我引用了this)如下所示:

GUID *pPwrGUID;
GUID subGUID = GUID_VIDEO_SUBGROUP;
GUID BriGUID = GUID_VIDEO_CURRENT_MONITOR_BRIGHTNESS;

PowerGetActiveScheme(NULL, &pPwrGUID);
PowerWriteACValueIndex(NULL, pPwrGUID, &subGUID, &BriGUID, 0);

这看起来很简单。我遇到的问题是 PowerWriteACValueIndex 返回错误代码 2:未找到文件,这对我来说没有多大意义。我在想问题只是我有一个错误的索引值(PowerWriteACValueIndex 函数中的最后一个参数),但是使用 PowerReadACValueIndex 将写入更改为读取(以查看是否可以获得合法值)也返回 2。我已检查并确保 GUID_VIDEO_CURRENT_MONITOR_BRIGHTNESS 在头文件中的 GUID_VIDEO_SUBGROUP 下。

我能想到的唯一可能有用的信息是我的 WINVER 设置为 0x0600 (vista)。

您知道这里可能出了什么问题吗?看起来这应该是一个非常简单的过程,但我真的没有任何运气。谢谢。

【问题讨论】:

【参考方案1】:

好的,通过反复试验得到了我想要的东西。显然 GUID_VIDEO_CURRENT_MONITOR_BRIGHTNESS 不是正确的使用方法,并且由于某种原因,这些功能无法使用它(即使它在我的子组下的头文件中)。所以,我现在不确定它的目的是什么,但不要在这种情况下使用它。

起作用的是相同的功能,但使用的是 GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS。如果要更改“变暗”状态的亮度,还有 GUID_DEVICE_POWER_POLICY_VIDEO_DIM_BRIGHTNESS。

改用这个定义,我得到了我想要的行为。

【讨论】:

我知道这在这一点上很古老,但要澄清一下:GUID_VIDEO_CURRENT_MONITOR_BRIGHTNESS 的点是报告背光设置的当前亮度级别。由于自动亮度或热节流等因素,这可能与策略亮度(您在上面提供的 GUID)不同。

以上是关于使用 Windows 电源管理 API 调暗显示器的主要内容,如果未能解决你的问题,请参考以下文章

是 Windows 电源管理用户特定的吗?

检查显示是不是被windows电源管理关闭

尝试了解 Windows 电源配置 API

Linux 电源管理 API [关闭]

在 Windows XP 上监控显示器电源事件

最小(最大)处理器状态的 API,C++