使用Windows Power Management API调暗监视器

时间:2013-01-28 16:44:02

标签: windows visual-c++ power-management

我正在尝试做一些看似简单的事情,我只想让我的程序能够在某些条件下调整显示器亮度。所以,我查看了窗口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:File Not Found,这对我来说没有多大意义。我认为问题只是我的索引值不好(PowerWriteACValueIndex函数中的最后一个参数),但是使用PowerReadACValueIndex将写入更改为读取(以查看是否可以获得合法值)也会返回2.已经检查并确保GUID_VIDEO_CURRENT_MONITOR_BRIGHTNESS位于头文件中的GUID_VIDEO_SUBGROUP下。

我能想到的其他信息可能会有所帮助,我的WINVER设置为0x0600(vista)。

任何想法可能会出错?它似乎应该是一个非常简单的过程,但我真的没有运气。谢谢。

1 个答案:

答案 0 :(得分:4)

好的,通过一些试验和错误得到我想要的东西。显然GUID_VIDEO_CURRENT_MONITOR_BRIGHTNESS不是正确使用的东西,由于某种原因,这些函数不能用于它(即使它在我的子组下的头文件中)。所以,我现在还不确定它的目的是什么,但不要在这种情况下使用它。

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

使用此定义,我得到了我想要的行为。