1

プログラムでディスプレイの明るさを設定するには、次の 2 つのオプションがありました。

  • 使い方PowerWriteACValueIndexPowerWriteDCValueIndexAPI
  • 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 部分についても同じことを行います。

現在、奇妙な動作は次のとおりです。

  1. ボタンクリックハンドラーイベントでこのコードを呼び出すと、これらの値が設定されますが、「一般的な」画面の明るさスライダー (さらに言えば、ディスプレイの明るさ)は設定されません。(誰かが投稿内の写真のリンクを編集してください)
  2. ユーザーがもう一度ボタンをクリックすると、設定が適用されます。
  3. ユーザーがボタンをクリックしたときに 2 回実行されるようにコードをループに入れた場合、(1) のように動作します。
  4. 同じコマンドをコマンドラインから手動で実行しようとすると、問題なく動作します。

これはまったく予想外で、何が間違っているのかわかりません。Windows APIのPowerWriteACValueIndexand関数を使用すると、まったく同じ結果が得られます。PowerWriteDCValueIndex

4

1 に答える 1

1

アプリに文字列をクリップボードにコピーさせて、引数の構文を再確認してください。ちょっとしたタイプミスで台無しになってしまうこともあります。

また、呼び出されるアプリケーションがsyswowまたはsystem32からのものかどうかを確認します(アプリのコンパイル方法によって異なります)。終了コードを確認するか、取得したエラー出力を確認することもできます。エラー出力は次のようにキャプチャできます。

Dim so As System.IO.StreamReader
        Dim se As System.IO.StreamReader
        se = myproc.StandardError
        so = myproc.StandardOutput
        myproc.WaitForExit()
        MsgBox(so.ReadToEnd & vbcrlf & se.ReadToEnd)
于 2015-07-17T06:48:51.430 に答える