Тусклый экран на Windows с C++
Я пытался затемнить экран на платформе Windows из моей программы. Я знаю, что есть API SetMonitorBrightness, который позволяет это, но проблема для меня в том, что было бы неплохо иметь возможность затемнения экрана и в Windows XP (который этот API не поддерживает), а также затемнения экранов на настольных компьютерах.
Поэтому я провел небольшое исследование и обнаружил, что эта утилита без проблем затемняет мой экран на рабочем столе Windows XP. Я пытался связаться с автором, чтобы узнать, как они реализовали диммер, но я не получил ответа от них.
Поэтому мне было любопытно услышать от разработчиков на этом сайте, как, по-вашему, им удалось уменьшить яркость экрана, когда API SetMonitorBrightness не поддерживается?
PS. Я сам начинающий разработчик и пытаюсь написать энергосберегающую программу для нашего малого бизнеса. Это некоммерческая организация, и у нас нет средств, чтобы нанять разработчика Windows, чтобы сделать это для нас. Большинство наших компьютеров являются настольными компьютерами с Windows XP, поэтому, как вы можете видеть, я не могу использовать API SetMonitorBrightness, поскольку он широко документирован в Интернете.
Заранее спасибо.
2 ответа
В случае, если вы цитируете, посмотрите на заставку с Dependancy Walker. Я предполагаю, что они создают полноэкранное окно и используют SetLayeredWindowAttributes(), чтобы установить полупрозрачную настройку для окна, таким образом делая экран темным. Я сомневаюсь, что это сэкономит вам много денег.
Возможно, вы захотите взглянуть на протокол DDC, который позволяет вам контролировать аспекты некоторых мониторов. MS API, который позволяет вам сделать это, можно найти здесь: http://msdn.microsoft.com/en-us/library/windows/hardware/ff570290%28v=vs.85%29.aspx и вы должны посмотреть у I2C тоже функции.
В качестве альтернативы вы можете найти готовую библиотеку, которая сделает все для вас, например, http://www.nicomsoft.com/products/i2c/. У них также есть диммерное приложение, бесплатное для личного пользования и платное для коммерческого использования. Они могут даже позволить вам использовать его бесплатно, если вы свяжетесь с ними и объясните, что это некоммерческая организация.
Если вы пытаетесь сделать это как программу энергосбережения, почему бы не использовать настройку заставки, которая выключает монитор после определенного периода бездействия? В любом случае
Простите, если эта информация устарела, но я делал это раньше, используя SetDeviceGammaRamp. Версия 'Get' также доступна для сохранения и восстановления состояния. Я видел, как он использовался в программах на C#, поэтому он все еще может быть актуальным, хотя и не слишком распространенным.