【问题标题】:How can I make my pc hibernate if pc battery level drops 18%?如果电脑电池电量下降 18%,我怎样才能让我的电脑休眠?
【发布时间】:2020-05-30 11:09:48
【问题描述】:
我通过 - 获取电池电量 -
WMIC PATH Win32_Battery Get EstimatedChargeRemaining
输出是 =>
估计的ChargeRemaining
100
另外,我可以使用以下命令休眠我的电脑,
shutdown /h
那么,我为什么要编写一个脚本,当电池电量低于 20% 时,它只是让我的电脑休眠,
我该如何实现?另外,当我再次打开它时,它不会再次休眠,我的意思是只运行一次,当电池电量超过 21% 时再次激活该功能,这是一项可行的服务。任何帮助都非常值得...提前致谢!!
【问题讨论】:
标签:
batch-file
cmd
window
【解决方案1】:
按照建议,我知道 Windows 中的这些事情,但我想创建一些即使笔记本电脑被其他人尝试启动也会自动休眠的东西,因此打开的进程或其他正在运行的任务不会用完/或突然崩溃。所以最后我在node中制作了这个程序,并制作了一个bat文件,用
node Autohibernate.js
因此节点程序将由此执行。最后让它以隐藏模式运行,即使电脑重新启动,我也制作了一个 vbscript 程序来执行此操作。而且是这样的-
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run chr(34) & "C:\autohibernate.bat" & Chr(34), 0
Set WshShell = Nothing
所以,最后是node程序,即下图的autohibernate.js-
const { exec, spawn } = require("child_process");
let current;
let critical = 18; // Battery level at which hibernates.
let repeatAfterActionFired = 1; //In minutes.
let generalCheckTimer = 3; // Check after every this time(in second).
async function somelife() {
exec("WMIC PATH Win32_Battery Get EstimatedChargeRemaining", (err, stdout, stderr) => {
current = stdout.slice(29);
console.log("battery-", current);
if (current > critical) {
checkAndHibernate();
} else {
console.log(
`Hibernation Fired, Next checkAndHibernate after ${repeatAfterActionFired} minutes.`
);
setTimeout(() => {
checkAndHibernate();
}, repeatAfterActionFired * 60 * 1_000);
exec("shutdown /h");
// exec()
}
});
}
const checkAndHibernate = () =>
setTimeout(() => {
somelife();
}, generalCheckTimer * 1_000);
checkAndHibernate();
谢谢,Stackoverflow。