【问题标题】:Adjust the screen brightness in a Windows 8 App在 Windows 8 应用程序中调整屏幕亮度
【发布时间】:2014-03-04 15:03:37
【问题描述】:

我正在开发一个 Windows 8 应用程序。有没有办法可以访问设备的亮度设置,以便用户可以从应用程序内部调整设备的亮度?谢谢

【问题讨论】:

  • 欢迎来到 Stack Overflow。到目前为止,您尝试过任何东西吗?请阅读FAQHow to Askhelp center 作为开始..

标签: c# windows-8 brightness


【解决方案1】:

我正在使用批处理文件来更改内容,但看起来 Windows 也提供了一个 API,您可以直接从 C# (以及 p/Invoke 然后调用)......所以以上所有内容仍然正确,并且仍然工作,但你也可以打电话

PowerGetActiveScheme

PowerWriteACValueIndex

PowerWriteDCValueIndex

这些链接也很好,因为它们为您列出了所有子指南。所以只需 P/Invoke 那些坏男孩并直接从您的应用程序中调用它们,不需要批处理文件:)

【讨论】:

  • 这是正确的答案,但我发现您必须在设置当前电源方案的值后 set the active power scheme 才能使 Windows 正确更新它们。否则你可能会得到未定义的行为。有关详细信息,请参阅related PR 中的注释。
【解决方案2】:

内置的windows UtilityPowerCfg可以动态改变亮度...

PowerCfg 通常从 cmd 行或批处理文件中调用,但您也可以使用 Process.Start 从您的应用程序中调用它。

在使用 PowerCfg 时,您需要了解以下几点:

  1. 方案 guid:与您要更改的电源方案关联的 guid。
  2. Sub Guid:与您要更改的电源设置组关联的 guid。
  3. 设置指南:与您要更改的电源设置组中的实际设置相关联的 guid。
  4. 范围或索引值:最后,您需要知道要将设置更改为什么值...有些设置有一个范围,您可以将其设置为该范围内的任何值,有些设置有要选择的值列表,您需要知道所需值的索引。

Scheme guid 实际上是最难获得的,因为用户可能已经定义了新的 scheme,因此需要通过调用 PowerCfg -getactivescheme 来找到该 guid

其他的guid都是常量,可以通过运行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

前几行获取方案 guid,接下来的两行设置实际值

您可以为显示亮度设置做一些非常相似的事情...这是这个子组和设置 guid(与自适应亮度相同的子组):

 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 运行它

希望有帮助!

【讨论】:

  • 谢谢。 I wrote a script 基于脚本中的批处理命令,以便我可以执行 setbrightness 12 或其他任何操作。我的笔记本电脑只使用亮度热键以 10 为增量设置,但在黄昏时,10 级太暗,20 级太亮,所以我经常使用脚本在这两个值之间设置一个可容忍的水平。
猜你喜欢
  • 2015-12-17
  • 1970-01-01
  • 1970-01-01
  • 2014-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多