笔记本电脑远程开关机

笔记本电脑远程开关机

tsvico Lv5

接上文电脑实现小爱语音关机 , 点灯家的 nodejs sdk 使用小爱控制老是报” 要操作的设备要出问题了,请稍候再试吧”,经过一番查找,找到 将电脑接入米家,远程、语音开关机,推送消息电脑接入米家,控制电脑开关机(无需购买外设),看了这两个方案很心动 💓,这两个方案都是部署在外部机器上的,且主要使用 wol,不是很贴合我的需求,先记录,后边再慢慢搞。

参考文章笔记本电脑远程开关机,非常感谢 🙏,恰巧我也是用的插座,我目前也是用的笔记本,总体来说此方案对目前我的设备来说非常完美,后续升级机器了再折腾别的

Tips:笔记本的自带电池必须能用,可能续航不行,但至少断开电源适配器后也能正常运行一分钟,如果电池已经完全坏掉,断开电源就关机的话,可能不适用这个程序,因为可能程序没有执行的时间电脑就已经没电物理强制关机了

来电自动开机

笔记本网上搜一下吧,我是老联想笔记本,借鉴的这个文章联想拯救者 Lenovo Legion 通电自启 插电自启 通电开机 插电开机 Wake on AC,我笔记本的配置在 Advanced>PCH-IO Configuration>State After G3

程序实现断开电源关机或休眠

程序非常简单,十几行,C++ 编写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <WIndows.h>

#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )

int main(int argc, char *argv[]) {
SYSTEM_POWER_STATUS powerStatus;
while (true) {
Sleep(5000);
GetSystemPowerStatus(&powerStatus);
if ((int) powerStatus.ACLineStatus == 0) {
system("shutdown -h");
}
}
}

原理就是通过 Windows API 获取电脑的电源状态,即 ACLineStatus,判断有没有断开电源,没有就等五秒钟再获取一次再判断;如果已经断开电源了,就执行休眠的 Shell 命令,当然也可以换成其他比如关机或重启命令,只需将 system 引号中内容替换成下面所需指令即可。

  1. 一段时间后关机:shutdown -s -t 秒数
  2. 立即关机命令:shutdown -p
  3. 一段时间后重启:shutdown -r -t 秒数
  4. 休眠命令:shutdown -h

tip: 对于从源博客下载的程序,我在使用过程中发现有控制台窗口。遂使用 gcc 自己编译了一份

点击查看详细内容GCC 编译 Win 图形程序不显示控制台方法 用 VS 编译 openCV 这些有控制台又有图形显示的程序,如果想隐藏控制台,只需要使用一行代码:
1
#pragma comment( linker, "/subsystem:/"windows/" /entry:/"mainCRTStartup/"" )

但是这个指令只有 VS 的编译器才支持,想用 GCC 编译 Windows 的图形界面程序但又不显示控制台,查了很久的资料,终于找到了对应的编译指令:

1
gcc -mwindows gui.cpp -o guinocmd.exe

需要在 GCC 编译的时候带上 -mwindows

开机自启该程序

我直接下载的源博客的,这里转存到了蓝奏云
程序仅 11kb,程序名为 AutoShutDownPC.exe
键盘按下 Win+R,输入 shell:Common Startup,进入开机自启目录,将程序放入该目录即可,重启电脑后该程序即可开机自启。

https://tsvico.lanzouw.com/b00efcpupi
密码:9six

完成

至此,关闭电脑电源后笔记本就会触发自动关机,打开电源触发开机,配合小爱音箱,就可以实现远程开关机了

  • 标题: 笔记本电脑远程开关机
  • 作者: tsvico
  • 创建于 : 2025-01-11 17:19:18
  • 更新于 : 2025-01-11 19:38:11
  • 链接: https://blog.tbox.fun/2025/4151791544.html
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论