创建了一个脚本来切换盖子关闭操作(睡眠/不执行任何操作)我可以看到它生效,但它不起作用

2024-02-26

我制作了一个 vbs 脚本,它基本上可以在“睡眠”和“不做任何事情”之间切换关闭盖子操作。

这个想法是在我的桌面上有一个图标来保存每次控制面板>电源选项>更改WhatClosingTheLidDoes。顺便说一句,我使用的是 Windows 7 x64。

当我运行它时,在控制面板中我可以看到盖子关闭操作发生变化,但是当我实际关闭盖子时,行为没有变化。

关于什么可能阻止系统遵守其指令有什么建议吗?

真的很奇怪,我可以在“控制面板”>“电源选项”中看到更改,但它不起作用......

视频演示在这里,不知道如何嵌入......

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:\WINDOWS\system32\cmd.exe", 0

切换盖动作.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

or

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

虽然我不认为这是代码的问题,因为正如我所说,你可以在视频中看到,我可以在控制面板中看到更改。

谢谢阅读,

任何建议都非常感激。


复制自此已删除问题的评论 https://stackoverflow.com/questions/23602077/cant-get-powercfg-setacvalueindex-to-work-with-changing-lid-closing-actions-s?rq=1:

原来缺少的是powercfg -setactive.

powercfg 需要其中之一来更新对当前方案的更改。因此,要通过命令行/批处理文件更改设置,您需要运行:

powercfg -setacvalueindex Scheme_GUID Sub_GUID Setting_GUID SettingIndex

其次是:

powercfg -setactive Scheme_GUID
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建了一个脚本来切换盖子关闭操作(睡眠/不执行任何操作)我可以看到它生效,但它不起作用 的相关文章

  • WiX - 根据环境将编译后的 web.config 复制到网站根目录

    作为 WiX 安装的一部分 我将所有转换 编译的 web config 文件复制到安装目录 编译后的 web config 的名称格式为 web ENV config 在我的安装 UI 中 我创建了一个自定义对话框 在其中解析 ENV 并填
  • 什么时候必须将 XPath 属性设置为 XML DOM 对象?

    例如 Set objXML CreateObject Microsoft XMLDOM objXML async False objXML validateOnParse False objXML resolveExternals Fals
  • 如何启动 VBS 的交互式控制台?

    与这个问题非常相似 如何启动 Perl 的交互式控制台 https stackoverflow com questions 73667 how can i start an interactive console for perl 我只是希
  • 为什么 choice.com 在批处理文件中创建无限循环?

    昨天我已经下载了choice com命令从这里FTP link ftp ftp microsoft com Services TechNet Windows msdos RESKIT SUPPDISK CHOICE COM在 Windows
  • 如何使用 Windows 命令行环境查找和替换文件中的文本?

    我正在使用 Windows 命令行环境编写批处理文件脚本 并希望用另一个文件 例如 BAR 更改文件中某些文本 例如 FOO 的每次出现 最简单的方法是什么 有内置函数吗 这里的很多答案都帮助我指明了正确的方向 但是没有一个适合我 所以我发
  • 有关于 VBScript 正则表达式对象 (RegExp) 的好文档吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们都知道每个正则表达式实现都有其自身的特点 我需要在使用 COM 自动化的应用程序中使用 Micros
  • 等待程序完成

    为了监视带宽使用情况并且不要在启动时加载不必要的程序 我想先执行dumeter exe 然后执行firefox exe 当我关闭firefox时 它应该杀死dumeter 我使用以下代码启动 Set WshShell WScript Cre
  • Linux 中的电源管理通知

    在基于 Linux 的系统中 我们可以使用哪些方法 最简单的方法 来获取电源状态更改的通知 例如 当计算机进入睡眠 休眠状态等时 我需要这个主要是为了在睡眠前保留某些状态 当然 在计算机唤醒后恢复该状态 您只需配置即可获得所有这些事件acp
  • 回显 unicode 字符

    我想通过运行bat 文件在cmd 中回显unicode 字符 我准备了一个简短的脚本 echo off SET message G p3 echo message pause 我怎样才能做到这一点 是否可以直接将这封信放入代码中 这样做 两
  • 如何使用 FOR 循环处理批处理文件中的“net use”命令错误输出?

    我在用着net use批处理文件中的命令用于连接远程位置 我想将它的输出存储到一个变量中并对其进行处理 当命令成功完成时 我的代码工作正常 但是 如果出现一些错误 例如密码错误 那么我无法将错误输出存储在变量中 它直接打印到正在运行脚本的控
  • 如何通过批处理文件检查服务是否正在运行并启动它,如果它没有运行?

    我想编写一个执行以下操作的批处理文件 Check if a service is running 如果正在运行 请退出批处理 如果没有运行 启动该服务 到目前为止 我在谷歌上搜索的代码示例被证明不起作用 所以我决定不发布它们 启动服务是通过
  • 使用批处理解析 XML 文件以从某些特定节点获取值

    对于每个节点列表有Lists作为其父节点 我想获取 保存前三个节点的变量值 即entry output and token 我知道如何使用 vbscript 来做到这一点 但对我来说 批量解决方案更有趣 请问可以做吗
  • 如何成功地用 XML 中的批处理替换文本

    我尝试使用批处理在 XML 页面中替换字符串 但无法成功完全替换它 我有这个批处理代码 echo off setlocal EnableDelayedExpansion set search logLevel 3 set replace l
  • 使用 for /f 查找并替换字符串为 if 语句和变量

    我编写了一个批处理文件 我想用另一个 txt 文件中的字符串覆盖关键字符串 目前 它完美地复制新的 File txt 文件 但不会用 OldFile txt 文件中的字符串替换字符串 File txt 文件中的字符串示例 密码 Pword
  • 如何获取Windows批处理的父文件夹

    我正在编写一个批处理文件 我需要获取该bat文件的父文件夹 有可能吗 注意 我的意思是批处理文件的父文件夹 而不是调用该批处理的提示的当前目录 Thanks 批处理的父文件夹位于变量中 dp0位于 例子 echo off setlocal
  • 比较批处理文件中的两个数字

    我在这个网站上搜索了我的问题 但没有找到解决我问题的方法 系统为玩家和计算机提供一个从 2 到 12 的随机数 这有 3 部分 X 大于 Y 如果 X 小于 Y 以及当 X 与 Y 相同 当我开始 bat 效果很好 我选择Play Game
  • 我可以从命令行或 MS-Dos 启用/禁用网络连接吗?

    我想从 Windows 8 中的命令行启用 禁用网络连接 netsh interface set interface Local Area Connection DISABLED 要启用该接口 您需要运行 netsh interface s
  • 经典的asp字符编码

    我在经典 asp 网站中遇到西班牙字符问题 用户可以在 aspx 页面上的表单中提交他们的姓名 地址 然后 aspx 页面将 ajax post 发送到经典的 asp 页面 它所做的所有操作都存储在我们的 Sql 2008 DB 中 我可以
  • 使用参数将变量从 vbscript 传递到批处理文件

    请问如何将 inp 变量从这段 vb 传递到我的名为 job bat 的批处理 确实 在从 job bat 进行回显 echo 2 时 我注意到 inp 未正确传递 提示命令视图 inp而不是从 vbs 检索到的值 谢谢 For Each
  • 如何使用批处理文件复制(和增量)文件的多个实例

    我需要创建一个批处理文件来复制文件并在将其放置到目的地时递增它 例子 copy C TEMP MyDoc txt E MyData 本质上 我需要这个复制命令在每次启动时进行复制 现在效果很好 我希望它增加文件名而不是覆盖它 如果我运行此命

随机推荐