我制作了一个vbs脚本,基本上可以在Sleep和nothing之间切换合上盖子的动作。
这个想法是有一个图标在我的桌面上保存去ControlPanel>PowerOptions>ChangeWhatClosingTheLidDoes每次。我用的是Windows 7 x64。
当我运行它时,在控制面板中我可以看到盖子关闭动作发生了变化,但是当我实际关闭盖子时,行为没有变化。
有什么建议可以阻止系统服从它的指示??
很奇怪,我可以看到ControlPanel>PowerOptions的变化,但它不工作…
视频演示在这里,不知道如何嵌入…https://www.youtube.com/watch?v=N1yjiTMgnzk&特性= youtu.be
vbs脚本基本上检查。bat文件中的值,反转它们并运行它。很简单的;
ToggleLidAction.vbs
Const ForAppending = 8
Const ForReading = 1
Dim outPutFile
Dim objFSO, objFile, objOutFile, strLine
dim sleepLine1, sleepLine2, doNothingLine1, doNothingLine2
sleepLine1 = "powercfg -SETACVALUEINDEX 381b4222-f694-41f0-9685-ff5bb260df2e 4f971e89-eebd-4455-a8de-9e59040e7347 5ca83367-6e45-459f-a27b-476b1d01c936 1"
sleepLine2 = "powercfg -SETDCVALUEINDEX 381b4222-f694-41f0-9685-ff5bb260df2e 4f971e89-eebd-4455-a8de-9e59040e7347 5ca83367-6e45-459f-a27b-476b1d01c936 1"
doNothingLine1 = "powercfg -SETACVALUEINDEX 381b4222-f694-41f0-9685-ff5bb260df2e 4f971e89-eebd-4455-a8de-9e59040e7347 5ca83367-6e45-459f-a27b-476b1d01c936 0"
doNothingLine2 = "powercfg -SETDCVALUEINDEX 381b4222-f694-41f0-9685-ff5bb260df2e 4f971e89- eebd-4455-a8de-9e59040e7347 5ca83367-6e45-459f-a27b-476b1d01c936 0"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("ToggleLidAction.bat", ForReading)
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
strDoNothing = Instr(strLine,"powercfg -SETDCVALUEINDEX 381b4222-f694-41f0-9685- ff5bb260df2e 4f971e89-eebd-4455-a8de-9e59040e7347 5ca83367-6e45-459f-a27b-476b1d01c936 0")
strSleep = Instr(strLine,"powercfg -SETDCVALUEINDEX 381b4222-f694-41f0-9685- ff5bb260df2e 4f971e89-eebd-4455-a8de-9e59040e7347 5ca83367-6e45-459f-a27b-476b1d01c936 1")
Loop
objFile.Close
Set obj = CreateObject("Scripting.FileSystemObject")
obj.DeleteFile("ToggleLidAction.bat")
If strDoNothing Then
outPutFile = "ToggleLidAction.bat"
Set objOutFile = objFSO.CreateTextFile(outPutFile,ForAppending)
objOutFile.WriteLine ""& sleepLine1 &""
objOutFile.WriteLine ""& sleepLine2 &""
Msgbox ("The System will now Sleep when the lid is closed.")
else if strSleep Then
outPutFile = "ToggleLidAction.bat"
Set objOutFile = objFSO.CreateTextFile(outPutFile,ForAppending)
objOutFile.WriteLine ""& doNothingLine1 &""
objOutFile.WriteLine ""& doNothingLine2 &""
Msgbox ("The System will now continue running when the lid is closed.")
end if
end if
objOutFile.Close
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run "ToggleLidAction.bat C:WINDOWSsystem32cmd.exe", 0
ToggleLidAction.bat
powercfg -SETACVALUEINDEX 381b4222-f694-41f0-9685-ff5bb260df2e 4f971e89-eebd-4455-a8de-9e59040e7347 5ca83367-6e45-459f-a27b-476b1d01c936 0
powercfg -SETDCVALUEINDEX 381b4222-f694-41f0-9685-ff5bb260df2e 4f971e89-eebd-4455-a8de-9e59040e7347 5ca83367-6e45-459f-a27b-476b1d01c936 0
或
powercfg -SETACVALUEINDEX 381b4222-f694-41f0-9685-ff5bb260df2e 4f971e89-eebd-4455-a8de- 9e59040e7347 5ca83367-6e45-459f-a27b-476b1d01c936 1
powercfg -SETDCVALUEINDEX 381b4222-f694-41f0-9685-ff5bb260df2e 4f971e89-eebd-4455-a8de-9e59040e7347 5ca83367-6e45-459f-a27b-476b1d01c936 1
虽然我不认为这是代码的问题,因为正如我所说的,你可以在视频中看到,我可以看到控制面板的变化。
谢谢你的阅读,
摘自已删除问题的评论:
原来缺失的是powercfg -setactive
。
powercfg需要其中一个来更新对当前方案的更改。因此,要通过cmd行/批处理文件更改设置,您需要运行:
powercfg -setacvalueindex Scheme_GUID Sub_GUID Setting_GUID SettingIndex
紧随其后:
powercfg -setactive Scheme_GUID