プログラムでディスプレイの明るさを設定するには、次の 2 つのオプションがありました。
- 使い方
PowerWriteACValueIndex
とPowerWriteDCValueIndex
API - PowerCfg.exe を使用する
さて、両方を試してみましたが、どちらも同じ(奇妙な)結果になりました。私が使用しているコードは次のとおりです。
With psiInfo
.FileName = "powercfg"
.UseShellExecute = True
.WindowStyle = ProcessWindowStyle.Hidden
.Arguments = "-setacvalueindex " & guidCurScheme.ToString() & " " & SUBGROUP_GUID.GUID_VIDEO_SUBGROUP & " " & SETTING_GUID.GUID_DISPBRIGHTNESS & " " & psValue.ValueAC
End With
pProc = Process.Start(psiInfo)
どこ :
Public Const GUID_VIDEO_SUBGROUP As String = "7516b95f-f776-4464-8c53-06167f40cc99"
Public Const GUID_DISPBRIGHTNESS As String = "aded5e82-b909-4619-9949-f5d71dac0bcb"
Public Structure POWERSETTING
Public ValueAC As String
Public ValueDC As String
End Structure
Dim psValue As POWERSETTING
Andは、 API 関数guidCurScheme
によって返されるアクティブな電源スキームの GUID です。PowerGetActiveScheme
「-setdcvalueindex」を使用して、DC 部分についても同じことを行います。
現在、奇妙な動作は次のとおりです。
- ボタンクリックハンドラーイベントでこのコードを呼び出すと、これらの値が設定されますが、「一般的な」画面の明るさスライダー (さらに言えば、ディスプレイの明るさ)は設定されません。(誰かが投稿内の写真のリンクを編集してください)
- ユーザーがもう一度ボタンをクリックすると、設定が適用されます。
- ユーザーがボタンをクリックしたときに 2 回実行されるようにコードをループに入れた場合、(1) のように動作します。
- 同じコマンドをコマンドラインから手動で実行しようとすると、問題なく動作します。
これはまったく予想外で、何が間違っているのかわかりません。Windows APIのPowerWriteACValueIndex
and関数を使用すると、まったく同じ結果が得られます。PowerWriteDCValueIndex