Тусклый экран в Windows с С++

Я искал экран на платформе Windows из моей программы. Я знаю, что есть API SetMonitorBrightness, который позволяет это, но проблема для меня заключается в том, что было бы неплохо иметь возможность затемнить экран в Windows XP (который этот API не поддерживает), а также тусклые экраны на настольных компьютерах.

Итак, я провел некоторое исследование и нашел эту утилиту, которая, кажется, смущает мой экран на рабочем столе Windows XP без проблем. Я попытался связаться с автором, чтобы узнать, как они реализовали диммер, но я не слышал от них ответа.

Поэтому мне было интересно услышать от разработчиков на этом сайте, как вы думаете, им удалось затушить экран, когда API SetMonitorBrightness не поддерживается?

PS. Я разработчик новичка, который пытается написать программу энергосбережения для нашего малого бизнеса. Это некоммерческая организация, и у нас нет средств нанять разработчика Windows, чтобы сделать это для нас. Большинство наших компьютеров - настольные компьютеры Windows XP, так что вы можете видеть, что я не могу использовать API SetMonitorBrightness, поскольку он широко документирован в Интернете.

Спасибо заранее.

Ответ 1

В случае, если вы цитируете, посмотрите на заставку с Dependancy Walker. Я предполагаю, что они создают полноэкранное окно и используют SetLayeredWindowAttributes(), чтобы установить полупрозрачную настройку для окна, таким образом экран становится тусклым. Я сомневаюсь, что это сэкономит вам много денег.

Возможно, вы захотите изучить протокол DDC, который позволяет вам контролировать аспекты некоторых мониторов. MS API, который позволяет вам это сделать, можно найти здесь: http://msdn.microsoft.com/en-us/library/windows/hardware/ff570290%28v=vs.85%29.aspx, и вы также должны посмотреть на функции I2C.

В качестве альтернативы вы можете искать готовую библиотеку для работы с DDC, например http://www.nicomsoft.com/products/i2c/. У них тоже есть более мягкое приложение, которое бесплатное для личного использования и несвободное для коммерческого использования. Они могут даже позволить вам использовать его бесплатно, если вы обратитесь к ним и объясните это для некоммерческой организации.

Если вы пытаетесь сделать это как программу экономии энергии, почему бы не использовать настройку заставки, которая отключает монитор после определенного периода бездействия? В любом случае

Ответ 2

Простите меня, если эта информация устарела, но я делал это в прошлом с помощью SetDeviceGammaRamp. Версия "Get" доступна также для сохранения и восстановления состояния. Я видел, как он использовался в программах на С#, поэтому он все равно может быть релевантным, хотя и не слишком распространенным.