Я пытаюсь сделать что-то достаточно простое, я просто хочу, чтобы моя программа могла регулировать яркость монитора при определенных условиях. Итак, я заглянул в Power Management API < / a> и нашел кое-что, что мне показалось, что они подойдут. Ядро кода, который я собрал (в основном, я ссылался на 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. I уже проверил и убедился, что GUID_VIDEO_CURRENT_MONITOR_BRIGHTNESS находится под GUID_VIDEO_SUBGROUP в файле заголовка.

Единственная полезная информация, которую я могу придумать, - это то, что мой WINVER установлен на 0x0600 (перспектива).

Есть идеи, что здесь может быть не так? Похоже, это должен быть довольно простой процесс, но мне действительно не повезло. Спасибо.

5
tonyd24601 28 Янв 2013 в 20:44

1 ответ

Лучший ответ

Хорошо, я получил то, что хотел, работая методом проб и ошибок. По-видимому, GUID_VIDEO_CURRENT_MONITOR_BRIGHTNESS не является правильным для использования, и по какой-то причине функции не будут работать с ним (даже если он находится в моем файле заголовка в подгруппе). Итак, я не совсем уверен на данный момент, какова его цель, но не используйте его в этом случае.

Работает та же функция, но с использованием GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS. Также есть GUID_DEVICE_POWER_POLICY_VIDEO_DIM_BRIGHTNESS, если вы хотите изменить яркость «затемненного» состояния.

Используя вместо этого это определение, я получаю желаемое поведение.

4
tonyd24601 31 Янв 2013 в 20:30
Я знаю, что на данный момент это устарело, но поясню: цель GUID_VIDEO_CURRENT_MONITOR_BRIGHTNESS - сообщить текущий уровень яркости, на который установлена ​​подсветка. Это может отличаться от яркости политики (GUID, которые вы указали выше) из-за таких факторов, как автоматическая яркость или регулирование температуры.
 – 
Katie
23 Июл 2018 в 23:00