Windows计划任务+python实现定时久坐提醒,锁屏强制休息

本文最后更新于:2022/02/05 21:40

前言 (Introduction)

作为一个不怎么进实验室做实验的高龄PhD candidate,常年坐在电脑前摸鱼看文献写文章一搞就是一整天,长此以往颈椎和腰都要报废了,所以每隔一段时间起来活动下是很有必要的。如果有个工具/软件能每隔1个小时提醒下,起来喝口水(避免肾结石),去室外散步(运动量达标+保护视力[1][2]),休息10分钟,简直就是一举N得。

一通搜索后发现并没有现成的能满足需求且足够简洁的第三方软件或者工具(有些能实现这个目的但是会额外带来各种烦人的广告),最后决定利用Windows自带的计划任务+python脚本来实现。

方案 (Solutions)

version-1

该思路的基本原理是:通过Windows计划任务,设定每隔1小时启动一个python脚本,该脚本会弹窗且播放闹铃进行久坐提醒(只要你在电脑上认真看文献而不是刷手机就能被提醒到:joy:),然后开启10分钟倒计时。

python脚本(countdown.py)比较简单:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import os
import time

timeleft = 600
print("Take a break and have {} s rest!".format(timeleft))
print("\r{: >12} s left".format(timeleft), end="")

while timeleft > 0:
time.sleep(1)
timeleft = timeleft - 1
if timeleft != 0:
print("\r{: >12} s left".format(timeleft), end="")
else:
print("\r{: >12} s left".format(timeleft), end="\n")

建立计划任务流程如下:

  1. Win+R打开“运行”,输入taskschd.msc回车,打开计划任务:

  1. 创建任务,随意命名(这里命名为rest):

  1. 编辑触发器,选定起始时间(可以略早于设定该计划的时间)和到期时间(到期时间也可以不勾选):

此处设定的是每天9点50开始启动该脚本,此后10点50,11点50...均会启动此脚本。

  1. 编辑操作,设定脚本的路径:

  1. 剩下设置可以保持默认,或者根据自己的需要设置。

设定完之后可以点击下运行试试效果。需要注意的是,在触发器设置的时候设定的是9点50启动,如果你到办公室太晚,10点才开电脑,那么计划任务是不会运行的...所以此处可以按照自己的情况自行设置(督促我们要早点去办公室摸鱼干活)。

version-2

测试一段时间后,计划任务和脚本运行良好,但是我的颈椎和腰表示并不好:joy:,因为每次弹窗后,要是读文献读到关键部分或者是写文章到关键部分(或者是摸鱼摸到兴头上),我只会顺手把提醒窗口关了,然后无视提醒,最后提醒了个寂寞......

所以我决定狠一点,时间到了就自动锁屏,每隔10s锁一次,关闭提醒窗口也没用,让自己没法摸鱼干活,真正的强制休息,只能被迫起来喝喝水,出去走走。

countdown.py脚本修改如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import os
import time

settimeleft = 600
ttp = 10
os.popen("pythonw lockscreen.py {} {}".format(settimeleft, ttp))
timeleft = settimeleft
print("Take a break and have {} s rest! Screen will be locked in {} s!".format(settimeleft, ttp))
print("\r{: >12} s left".format(timeleft), end='')

while timeleft > 0:
time.sleep(1)
timeleft = timeleft - 1
if timeleft != 0:
print("\r{: >12} s left".format(timeleft), end="")
else:
print("\r{: >12} s left".format(timeleft), end="\n")

为了实现锁屏,增加一个lockscreen.py脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import os
import sys
import time


def lockscreen():
os.system("rundll32.exe user32.dll,LockWorkStation")


count = int(sys.argv[1])
ttp = int(sys.argv[2])
time.sleep(ttp)
lockscreen()
count = count - ttp
while count > 0:
if count % 10 == 0:
lockscreen()
time.sleep(1)
count -= 1

为了使锁屏脚本能正常工作,需要修改下计划任务中的操作中的起始路径(因为countdown.py脚本中调用lockscreen.py脚本时没有设置绝对路径,如果设置了绝对路径也可忽略此步骤):

这样的话,每个小时50分的时候,脚本就会弹窗提示休息10分钟,并且在10s后开始锁屏,每隔10s锁一次屏,让你无法工作,只能被迫休息

运行了一段时间发现效果显著,喝水增多+运动达标+视力都更好了呢。

Disclaimer: 切记不要在有用电脑计划的时候开启这个计划任务(比如用电脑参加会议或者要和老板用电脑讨论文章),不然锁屏了就很尴尬(补救方法就是拼手速在10s内打开任务管理器杀掉python进程或者重启电脑)。

参考资料 (References)

  1. BJO | 近视可能与光照强度相关,户外活动预防近视原因揭示 ↩︎
  2. Lingham G, Mackey DA, Lucas R, et al. How does spending time outdoors protect against myopia? A review. British Journal of Ophthalmology 2020;104:593-599. ↩︎

“觉得不错的话,请我喝杯咖啡吧~ ୧(๑•̀⌄•́๑)૭”

微信二维码

微信支付

支付宝二维码

支付宝支付