在我解释你我的解决方案,我会建议你与副本复制当前的电源方案和工作,而不是改变现有方案。目前的方案可能是一种默认方案,并且无备份更换有时是有风险的撤消配置更改并不总是那么容易。
我有2个解决方案我想与大家分享。第一个提供硬件电源按钮的解决方案。它也可能是开始菜单中关机的解决方案,但我无法在“更改用户”中设置它。我只在Windows 10机器上测试过它(我没有Windows 7机器来测试它),所以有可能它可能在windows 7上的开始菜单按钮上工作(有人可以证实这一点)。问题是,似乎从Windows 10的开始菜单中的关机按钮并不像在Windows 7中那样(Windows 10在其开始菜单中有两个单独的按钮:一个用于注销和切换用户,另一个用于注销和切换用户用于关机,休眠和重启; Windows 7的所有选项都有一个按钮)。
第二个解决方案是在开始菜单中关闭的第二个选项,它肯定适用于Windows 7(我之前使用过它)。
这两种解决方案都可能需要重新启动,特别是第一个。
实际有更多的设置,您可以用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>
或改变其值(S):
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。它们应该是默认值,但您可以通过在所有可用设置中搜索字符串“power”(不区分大小写的搜索)来查找它们。硬件电源按钮的动作设置以及开始菜单中关机按钮动作的设置都属于同一个子组:子组别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
会为开始菜单执行技巧的原因。
对于开始菜单中的关机按钮,我知道在Windows 7中还有另一个选项:更改位于HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced
的注册表Start_PowerButtonAction
。我警告你:改变注册表是微妙的,并不是很好的做法,但有时它是改变某些配置的唯一方法。我不确定,但它可能也需要管理员权限,以便管理员可以运行管理员可能是必要的(也可以有人确认这一点?)。
这些都是十六进制值注册表可以采取:
Action Value
------------ --------
Change User 100
Log Off 1
Lock 200
Restart 4
Sleep 10
Hibernate 40
Shutdown 2
您可以使用GUI regedit
来检查注册表中的当前值。或检查值在命令行上reg
(编辑:在reg
使用HKCU
代替HKEY_CURRENT_USER
):
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v Start_PowerButtonAction
后您检查注册表中存在,并具有相应于你的开始菜单的关机按钮就可以值修改它。但在修改任何注册表之前,请确保back-up the registry with regedit
(this official Windows link也提供帮助)以防出现问题。
要修改注册表Start_PowerButtonAction
并设置“更改用户”作为批处理操作,您可以使用:
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
密钥。
测试完成后,您可以将这些命令添加到批处理脚本中。最终的脚本应该是这样的:
@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:对于重启你可以在你的scrit年底前exit
添加shutdown
命令:
SHUTDOWN.exe /r /f /t 60 /d P:2:4
将产生60秒后重新启动原因是:“操作系统:重新配置(已计划)”。有关更多信息,请参阅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
是一个始终需要管理员权限的命令。如果失败,您知道该脚本尚未以管理员身份运行。
请注意,https://stackoverflow.com不是一个免费的脚本/代码写作服务。如果您告诉我们您迄今为止所尝试的内容(包括您已经使用的脚本/代码)以及您卡住的位置,那么我们可以尝试帮助解决特定问题。您还应该阅读[我如何提出一个好问题?](https://stackoverflow.com/help/how-to-ask)。 – DavidPostill
@JoeWright你能解决这个问题吗? –