要以编程方式设置显示亮度,我有两个选择:
PowerWriteACValueIndex
和PowerWriteDCValueIndex
API 现在,我尝试了两种方法,两者都给了我相同(奇怪)的结果。以下是我使用的代码:
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"。
现在奇怪的行为如下:
这完全出乎意料,我不知道自己做错了什么。当我使用Windows API中的PowerWriteACValueIndex
和PowerWriteDCValueIndex
函数时,它会得到完全相同的结果。
答案 0 :(得分:1)
可以通过让应用程序将字符串复制到剪贴板来仔细检查参数的语法。有时只是一个小小的错字让我失去了它。
此外,我还要检查被调用的应用程序是来自syswow还是来自system32的应用程序(这取决于您编译应用程序的方式) 您还可以检查exitcode或查看您获得的错误输出。 可以像这样捕获错误输出:
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)