Отрегулируйте яркость экрана в приложении Windows 8

Я разрабатываю приложение для Windows 8. Есть ли способ получить доступ к настройкам яркости устройства, чтобы пользователь мог регулировать яркость устройства из приложения? Спасибо


person mdunlop9    schedule 04.03.2014    source источник
comment
Добро пожаловать в Stack Overflow. Вы уже пробовали что-нибудь? Пожалуйста, прочтите Часто задаваемые вопросы, Как спросить и справочный центр в качестве начала.   -  person Soner Gönül    schedule 04.03.2014


Ответы (2)


Я использовал пакетный файл, чтобы что-то изменить, но также похоже, что Windows предоставила API, который вы можете использовать непосредственно из С# (ну, p/Invoke, а затем вызвать)... так что все вышеперечисленное по-прежнему верно и будет работать, но вы также можете позвонить

PowerGetActiveScheme

PowerWriteACValueIndex

PowerWriteDCValueIndex

Эти ссылки тоже хороши, потому что в них перечислены все подсказки. Так что просто P/Invoke этих плохих парней и вызовите их прямо из вашего приложения, пакетный файл не нужен :)

person Brock    schedule 05.11.2014
comment
Это правильный ответ, но я обнаружил, что вам нужно установите активную схему питания на текущую схему питания после того, как вы установите значения для текущей схемы питания, чтобы Windows могла правильно их обновить. В противном случае вы можете получить неопределенное поведение. Дополнительные сведения см. в примечаниях к соответствующему PR. - person Jay; 09.12.2017

Встроенная утилита Windows PowerCfg может менять яркость на лету...

Обычно PowerCfg вызывается из строки cmd или в пакетных файлах, но вы также можете вызвать его из своего приложения, используя Process.Start.

При использовании PowerCfg вам необходимо знать несколько вещей:

  1. Руководство схемы: это руководство, связанное со схемой электропитания, которую вы хотите изменить.
  2. Подруководство: это подсказка, связанная с группой параметров мощности, которую вы хотите изменить.
  3. Руководство по настройке: это руководство, связанное с фактическим параметром в той группе параметров питания, которую вы хотите изменить.
  4. Диапазон или значение индекса. Наконец, вам нужно знать, какое значение вы хотите изменить на этот параметр... Некоторые параметры имеют диапазон, в котором вы можете установить любое значение внутри этого диапазона, некоторые параметры имеют список значений для выбора, и вам нужно знать индекс значения, которое вы хотите.

Получить guid Scheme на самом деле труднее всего, так как пользователь мог определить новые схемы, и поэтому guid необходимо найти, вызвав PowerCfg -getactivescheme

Все остальные гиды являются константами, и их можно найти, запустив PowerCfg - query

После того, как вы выстроите все направляющие, вы можете установить значение переменного тока (питание подключено) и постоянного тока (питание от батареи) для каждой настройки. с участием:

POWERCFG -SETACVALUEINDEX <SCHEME_GUID> <SUB_GUID> <SETTING_GUID> <SettingIndex>
and
POWERCFG -SETDCVALUEINDEX <SCHEME_GUID> <SUB_GUID> <SETTING_GUID> <SettingIndex>

В качестве примера... вот небольшой пакетный файл, который я использую для отключения функции адаптивной яркости:

Echo Disable Adaptive Display Brightness Setting

for /f "tokens=2 delims=:" %%G in ('powercfg -getactivescheme') do set guid=%%G

for /f %%G in ("%guid%") do set guid=%%G

powercfg -setacvalueindex %guid% 7516b95f-f776-4464-8c53-06167f40cc99 fbd9aa66-9553-4097-ba44-ed6e9d65eab8 000
powercfg -setdcvalueindex %guid% 7516b95f-f776-4464-8c53-06167f40cc99 fbd9aa66-9553-4097-ba44-ed6e9d65eab8 000

Первые две строки получают руководство по схеме, затем следующие две устанавливают фактические значения.

Вы можете сделать что-то очень похожее для настроек яркости дисплея... Это подгруппа и руководство по настройке (та же подгруппа, что и адаптивная яркость):

 Subgroup GUID: 7516b95f-f776-4464-8c53-06167f40cc99  (Display)
   Power Setting GUID: aded5e82-b909-4619-9949-f5d71dac0bcb  (Display brightness)
     Minimum Possible Setting: 0x00000000
     Maximum Possible Setting: 0x00000064
     Possible Settings increment: 0x00000001
     Possible Settings units: %

Чтобы вызвать его из своего приложения C#, вы можете создать файл cmd на лету и запустить его с помощью Process.Start

Надеюсь, это поможет!

person Brock    schedule 05.11.2014
comment
Спасибо. Я написал скрипт на основе пакетных команд в вашем скрипте, чтобы я мог делать setbrightness 12 или что-то еще . Мой ноутбук устанавливает только с шагом 10 с помощью горячих клавиш яркости, но в сумерках уровень 10 слишком тусклый, а уровень 20 слишком яркий, поэтому я часто использую скрипт, чтобы установить допустимый уровень между этими двумя значениями. - person Jay; 09.12.2017