要以编程方式设置显示亮度,我有两个选择:
- 使用
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
并且guidCurScheme
是有源电源方案的 GUID,由PowerGetActiveScheme
API 函数返回。我对 DC 部分做同样的事情,使用“-setdcvalueindex”。
现在奇怪的行为如下:
- 如果我在按钮单击处理程序事件中调用此代码,它将设置这些值,但不会设置“常规”屏幕亮度滑块(以及就此而言,显示亮度)。(请有人编辑帖子内的图片链接)
- 如果我用户第二次单击该按钮,它只会应用该设置。
- 如果我将代码放在一个循环中,以便在用户单击按钮时运行两次,它仍然会像 (1) 中那样运行
- 如果我尝试从命令行手动运行相同的命令,它将运行正常。
这完全出乎意料,我不知道我做错了什么。当我使用Windows API中的PowerWriteACValueIndex
and函数时,它给出了完全相同的结果。PowerWriteDCValueIndex