使用批处理文件更改Windows控制面板

时间:2017-01-08 20:38:08

标签: windows batch-file control-panel

我正在寻找如何使用批处理文件(没有PowerShell)在运行Windows 7的计算机上对Windows控制面板设置进行多处更改。

所需的设置是:

在PowerCFG Panel中:

  • 在AC上监视超时(切换到禁用)
  • AC上的硬盘超时(切换到禁用)
  • AC上的待机超时(切换到禁用)
  • AC上的休眠超时(切换到禁用)
  • 硬件电源按钮的操作(切换到禁用)

在“开始”菜单面板中:

  • 关机按钮的操作(切换到更改用户)

我已经尝试过这个脚本:

@Echo Off
POWERCFG /CHANGE monitor-timeout-ac 0
POWERCFG /CHANGE disk-timeout-ac 0
POWERCFG /CHANGE standby-timeout-ac 0
POWERCFG /CHANGE hibernate-timeout-ac 0
exit

但我没有找到如何获得其他设置。

谢谢转发

1 个答案:

答案 0 :(得分:2)

在我向您解释我的解决方案之前,我建议您复制当前的电源方案并使用该副本而不是更改当前的方案。当前方案可以是默认方案,并且没有备份的改变有时是有风险的。撤消配置更改并不总是那么容易。

我想与您分享2个解决方案。第一个是硬件电源按钮的解决方案。它也可能是开始菜单中关闭的解决方案,但我无法将其设置为"更改用户"。我只在Windows 10机器上测试过它(我没有Windows 7机器对它进行测试)所以有可能它甚至可以用于Windows 7上的开始菜单按钮(有人可以确认吗?)。问题是,看起来Windows 10开始菜单中的关机按钮与Windows 7中的关闭按钮不同(Windows 10的开始菜单中有2个单独的按钮:一个用于注销和切换用户,另一个用于关闭,休眠和重启; Windows 7有一个按钮用于所有选项) 第二个解决方案是在开始菜单中关闭的第二个选项,它肯定适用于Windows 7(我之前使用过它)。
两种解决方案都可能需要重新启动,特别是第一种解决方案。

  1. 实际上,您可以使用powercfg更改设置,然后使用/CHANGE(或-change-x)标记更改设置。硬件电源按钮就是其中之一。开始菜单中还有关闭按钮的设置,但我不确定它是否可以提供帮助。无论如何,要检查您可以更改电源方案的所有设置,您需要电源方案的GUID(36个字符长的ID)。 powercfg始终为您提供使用别名而非GUID的可能性。您可以选择,但GUID具有特定的表单,使其更容易在脚本中使用(可能在某些情况下除外)。别名更容易阅读,理解和记忆。

    要搜索您可以使用的方案的GUID:powercfg -list将为每个电源方案打印Power Scheme GUID: <GUID> (<NAME POWER SCHEME>)形式的字符串(名称与别名不同)。然后,您可以使用findstr选择特定的电源方案名称(或仅为活动方案选择powercfg -getactivescheme)并使用FOR /F提取GUID,如下所示:

    FOR /F "tokens=4" %%G IN ('powercfg /getactivescheme') DO set activeschemeGUID=%%G
    

    获得GUID(或别名)后,您可以使用以下命令检查其整个配置:

    powercfg -q <Scheme_GUID>
    

    powercfg -q(或powercfg -q %activeschemeGUID%使用第一个代码示例中的变量)将为您提供GUID,别名和(您的长列表)您可以更改的有效方案的所有设置及其值可以采取(powercfg他们实际上将其命名为价值指数而非价值) 设置按子组分组。每个子组和设置都有一个GUID。最常见的子组和设置甚至具有别名。要检查设置和子组的所有可用别名,可以使用powercfg -aliases。您需要GUID(或别名,如果可用)来检查设置可以采用的值及其当前值:

    powercfg -q <Scheme_GUID> <SUB_GUID> <Setting_GUID>
    

    或更改其值:

    powercfg -setacvalueindex <Scheme_GUID> <SUB_GUID> <Setting_GUID> <New_value_index> 
    powercfg -setdcvalueindex <Scheme_GUID> <SUB_GUID> <Setting_GUID> <New_value_index>
    

    第一个将更改AC值索引,第二个将更改DC(如果可用,请检查设置的值)。

    您现在唯一需要的是设置的正确GUID(如果可用,则为别名)。 我会给你一些搜索时间,并为你提供GUID。它们应该是默认的,但你总是可以通过搜索字符串&#34; power&#34;来查找它们。所有可用设置中的(不区分大小写的搜索)。硬件电源按钮的操作设置和开始菜单中关闭按钮的操作设置都属于同一子组:别名为SUB_BUTTONS和GUID 4f971e89-eebd-4455-a8de-9e59040e7347的子组。硬件按钮具有别名PBUTTONACTION和GUID 7648efa3-dd9c-4e3e-b566-50f929386280。开始按钮具有别名UIBUTTON_ACTION和GUID a7066653-8d6c-40a8-910e-a1f54b84c7e5。您可以使用powercfg -aliases在命令行上检查它们 在更改设置之前,请检查它们可以在命令行上执行哪些索引:

    powercfg -q %activeschemeGUID% SUB_BUTTONS PBUTTONACTION
    powercfg -q %activeschemeGUID% SUB_BUTTONS UIBUTTON_ACTION
    

    如果这不起作用,您应该尝试使用GUID而不是别名,或者尝试为您的配置查找正确的GUID /别名。 在您看到所需的值索引后,您可以更改设置。在我的例子中,禁用硬件电源按钮是索引0.因此分别更改AC和DC:

    powercfg -setacvalueindex %activeschemeGUID% SUB_BUTTONS PBUTTONACTION 000
    powercfg -setdcvalueindex %activeschemeGUID% SUB_BUTTONS PBUTTONACTION 000
    

    UIBUTTON_ACTION我不幸地没有注销选项。所以我不能告诉你那个,但原则相同。这也是为什么我不确定UIBUTTON_ACTION是否会为开始菜单制作技巧的原因。

  2. 对于开始菜单中的关机按钮,我知道Windows 7中还有另一个选项:更改Start_PowerButtonAction中的注册表HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced。我警告你:改变注册表是微妙的,不是很好的做法,但有时它是改变一些配置的唯一方法。我不确定,但也可能需要管理员权限,因此可能需要以管理员身份运行(有人也可以确认吗?)。
    这些是注册表可以采用的十六进制值:

    Action           Value
    ------------  --------
    Change User        100
    Log Off              1
    Lock               200
    Restart              4
    Sleep               10
    Hibernate           40
    Shutdown             2
    

    您可以使用regedit GUI来检查注册表的当前值。或者使用reg编辑:使用HKCU代替HKEY_CURRENT_USER中的reg在命令行中检查该值:

    reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v Start_PowerButtonAction
    

    检查完注册表并且具有与开始菜单关闭按钮对应的值后,您可以修改它。但在修改任何注册表之前,请确保back-up the registry with regeditthis official Windows link也提供帮助)以防出现问题。
    修改注册表Start_PowerButtonAction并设置&#34;更改用户&#34;作为批量操作,您可以使用:

    reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v Start_PowerButtonAction /t REG_DWORD /d 100 /f
    

    如果它不存在,您可以使用相同的命令创建它并尝试它。如果它不起作用,请使用备份至少恢复HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced密钥。

  3. 在对其进行测试后,您可以在批处理脚本中添加这些命令。最终的脚本如下所示:

    @echo off
    SetLocal
    
    REM Get GUID of current power scheme
    FOR /F "tokens=4" %%G IN ('powercfg /getactivescheme') DO set activeschemeGUID=%%G
    
    REM Custom power scheme name
    set custom_name=CUSTOM_POWER_SCHEME_STACK
    
    REM Check if it already exists and if it exists, get its GUID
    FOR /F "tokens=4" %%G IN ('powercfg -list ^| find "%custom_name%"') DO (
        REM custom power scheme with that name already exists
        set custom_GUID=%%G
        goto :SetCustomActive
    )
    
    REM Here we're sure it doesn't exist: copy current active scheme and get GUID of that copy
    FOR /F "tokens=4" %%G IN ('powercfg -DUPLICATESCHEME %activeshcemeGUID%') DO et custom_GUID=%%G
    
    REM change the name of the new scheme (the copy) to the custom name
    powercfg -CHANGENAME %custom_GUID% %custom_name%
    
    :SetCustomActive
    powercfg -SETACTIVE %custom_GUID%
    set activeschemeGUID=%custom_GUID%
    
    REM Your code
    POWERCFG /CHANGE monitor-timeout-ac 0
    POWERCFG /CHANGE disk-timeout-ac 0
    POWERCFG /CHANGE standby-timeout-ac 0
    POWERCFG /CHANGE hibernate-timeout-ac 0
    
    REM change the power button
    powercfg -setacvalueindex %activeschemeGUID% SUB_BUTTONS PBUTTONACTION 000
    powercfg -setdcvalueindex %activeschemeGUID% SUB_BUTTONS PBUTTONACTION 000
    
    REM Change the start menu button (replace with powercfg method below if available)
    reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v Start_PowerButtonAction /t REG_DWORD /d 100
    REM powercfg -setacvalueindex %activeschemeGUID% SUB_BUTTONS UIBUTTON_ACTION ???
    REM powercfg -setdcvalueindex %activeschemeGUID% SUB_BUTTONS UIBUTTON_ACTION ???
    
    EndLocal
    exit /b 0
    

    PS:对于重启,您可以在exit之前的scrit末尾添加shutdown命令:

    SHUTDOWN.exe /r /f /t 60 /d P:2:4
    

    将在60秒后生成重启,原因如下:&#34;操作系统:重新配置(已计划)&#34;。有关详细信息,请参阅this link

    PPS:如果您使用注册表解决方案,则可以使用以下内容检查脚本是否在脚本开头以管理员权限运行(如果需要管理员权限):

    openfiles > NUL 2>&1 
    if %ERRORLEVEL% NEQ 0 (
        REM Command failed => no admin rights
        echo This executable requires admin-rights!
        exit /b 1
    )
    

    openfiles是一个始终需要管理员权限的命令。如果失败,您就知道脚本没有以管理员身份运行。