1.前言

前段时间买了个小米Sounds Pro来听歌,它自带蓝牙Mesh网关,我就想着别浪费了,买了几个米家智能插座实现各种小电器的智能开关,还买了个米家空调伴侣2让空调也连上米家。这些都搞了,再想着电脑也来个自动开关机多方便,市面上有许多接入米家的电脑开机卡可以实现开关机,但是适用于台式机,我的是笔记本电脑,所以安装不上去。后面想到电脑有个通电自动开机,可以借此加上智能插座实现自动开机,但是关机的话就不行了,所以写个小程序实现断电自动关机/休眠。

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

2.来电自动开机

我的电脑是Dell电脑,所以:

  1. 重启进入BIOS界面
  2. 选择BIOS SETUP
  3. 选择Power Management
  4. 设置AC Recovery
  5. 选择Power On
  6. 勾选Save as Custom User Setting
  7. 选择Apply
  8. 选择Exit

然后测试一下,在电脑关机或休眠且断开电源适配器的情况下,连接上电源适配器,电脑成功开机,第一步成功实现。

不同的笔记本电脑可能有不同的设置方法,请参考网上的教程,搜索关键词你的电脑品牌+BIOS通电自启动

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

程序非常简单,十几行,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

4.开机自启该程序

我使用VS编译的,程序仅11kb,我的程序名为AutoShutDownPC.exe

键盘按下Win+R,输入shell:Common Startup,进入开机自启目录,将程序放入该目录即可,重启电脑后该程序即可开机自启。

此为断电休眠程序:点击下载AutoShutDownPC.exe

此为断电关机程序:点击下载AutoShutDownPC.exe

5.自动登录账户

电脑开机后,如过没有进入账户,过几秒钟后我的屏幕会自动熄灭,所以我选择设置一下自动进入账户,直接进入桌面,反正是我一个人用,不用输入密码也行

关闭密码设置参考

6.大功告成

至此,使用米家智能插座实现电脑自动开关机完成,喊出小爱同学,关闭电脑即可关机