2014-03-04 53 views
1

我正在開發Windows 8應用程序。有沒有一種方法可以訪問設備的亮度設置,以便用戶可以從應用程序內部調整設備的亮度?由於調整Windows 8應用程序的屏幕亮度

+0

歡迎來到堆棧溢出。你到目前爲止試過_anything_嗎?請閱讀[常見問題],[問]和[幫助]作爲開始。 –

回答

0

內置的Windows工具PowerCfg可以動態更改亮度...

通常PowerCfg從CMD行或批處理文件調用,但你也可以從你的應用程序中使用Process.Start調用它。

使用的PowerCfg你需要知道的幾件事情:

  1. 的方案GUID:這是您要更改電源使用方案相關聯的GUID。
  2. 小指導:哪個guid與您想要更改的力量設置組關聯。
  3. 設置指南:哪個guid與您要更改的電源設置組中的實際設置相關聯。
  4. 範圍或索引值:最後,您需要知道要將該設置更改爲什麼值...某些設置有一個範圍,您可以將其設置爲該範圍內的任何值,某些設置具有列表的值來選擇,你需要知道你想要的值的索引。

的方案GUID實際上是最難得到的,因爲用戶可以定義新的方案,因此,GUID需要通過調用PowerCfg -getactivescheme

其他的GUID發現都是常數,可以是通過運行PowerCfg - query

一旦你把所有的GUID一字排開,你可以設置每個設置的AC(電源插入)和直流(電池)價值發現。搭配:

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

希望幫助辦好了!

+0

謝謝。 [我寫了一個腳本](https://gist.github.com/jay/2c4ca23314f1ed31c24da390d86c2b23)基於腳本中的批處理命令,以便我可以執行'setbrightness 12'或其他任何操作。我的筆記本電腦只使用亮度熱鍵以10爲增量進行設置,但在黃昏時,10級太暗,20級太亮,所以我經常使用腳本在這兩個值之間設置一個可容忍的級別。 – Jay

1

我正在使用批處理文件來改變東西,但它也看起來像Windows提供了一個API,你可以直接從C#(以及p/Invoke然後調用)以及...因此,所有上述的情況仍然如此,將仍然可以工作,但你也可以撥打

PowerGetActiveScheme

PowerWriteACValueIndex

PowerWriteDCValueIndex

這些鏈接都不錯過,因爲他們已經列出的所有子的GUID爲你而出。所以只是P /調用那些壞男孩,並直接從你的應用程序打電話給他們,沒有批處理文件需要:)

+0

這是正確的答案,但我發現你必須[設置有功功率方案](https://github.com/HubKing/LinkBrightness/blob/e8168f1e995622a3aa67797f6a97ca316c6ff7ed/LinkBrightness/Program.cs#L536-L543)到當前在設置當前電源方案的值後,Windows才能正確更新它們。否則,您可能會收到未定義的行爲。有關更多信息,請參閱[相關PR](https://github.com/HubKing/LinkBrightness/pull/1)中的註釋。 – Jay

相關問題