likes
comments
collection
share

高效能人士必备:windows开机自启动任务

作者站长头像
站长
· 阅读数 5

0、序言

最近对象跟我抱怨,因为公司每天都断电,笔记本电池又有点老化,即便休眠也撑不过一晚上,每天去都要重新开机开软件开文档,简直烦死了,所以希望一开机就能:

  1. 自动打开常用的几款软件
  2. 自动发送每日待办清单到邮箱
  3. 弹窗显示一条读书笔记

这么些小要求,当然是要满足TA啦~

1、需求分析

首先,接到需求的第一步,便是分析需求。

需求点1和2都很好办,用bat脚本就能做到;需求点3,我想的是弹出图片,用py脚本就可以简单实现,最后在bat里调用py脚本。

话不多说,直接开撸。

2、代码实现

2.1 自动打开常用的几款软件

2.2.1 windows开机启动目录

只需两步,快速找到开机启动目录:

① 快捷键win+R,打开运行窗口;

② 输入shell:startup快速找到开机启动目录。

高效能人士必备:windows开机自启动任务

当电脑开机之后,就会自动执行这个目录下的内容,如果是bat文件,系统会自动执行,如果是文件夹或其他文件,则系统会自动调用相关程序打开。

因此,如果是想自动打开某些软件,可以将其快捷方式粘贴到这个目录下,或者用bat脚本打开:

@REM startTask.bat
tasklist|find /i "程序名称.exe" && echo started || start "" "D:\software\程序名称.exe"

这里需要注意的是,bat脚本最好用notepad++打开,将编码格式设为ANSI,否则,当路径中包含中文时可能会报错

2.2.2 自动发送每日待办清单到邮箱

对象会在每周开始前,将一周的待办事项,以日期命名方式的txt,存放在{ 每日待办清单 }的文件夹下。 高效能人士必备:windows开机自启动任务 因此,我只需要把txt文件中的内容读出来,发送到邮件正文即可。对象的手机设置了邮件提醒,开机后就会收到清单邮件,达到事项提醒的效果。

bat进行邮箱配置:

@REM mail.bat
blat -install smtp.qq.com xxx@qq.com

set yy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%

if exist "E:\每日待办清单\%yy%.%mm%.%dd%.txt" (
    echo "文件存在">>"C:\Users\AppData\Roaming\Microsoft\Windows\myBats\blat.log"
) else (
    echo "文件不存在">>"C:\Users\AppData\Roaming\Microsoft\Windows\myBats\blat.log"
	echo "正在为您创建该文件...">>"C:\Users\AppData\Roaming\Microsoft\Windows\myBats\blat.log"
	echo %yy%-%mm%-%dd%>>"E:\每日待办清单\%yy%.%mm%.%dd%.txt" 
	echo "创建成功">>"C:\Users\AppData\Roaming\Microsoft\Windows\myBats\blat.log"
	type "C:\Users\AppData\Roaming\Microsoft\Windows\myBats\mail.txt">>"E:\每日待办清单\%yy%.%mm%.%dd%.txt" 

) 

blat "E:\每日待办清单\%yy%.%mm%.%dd%.txt" -to yyy@qq.com -u xxx@qq.com -pw QQ邮箱的授权码(注意不是密码)-subject 邮件标题 -debug -log "C:\Users\AppData\Roaming\Microsoft\Windows\blat.log(日志文件路径)" -timestamp

这里需要注意,xxx@qq.com指发送的邮箱,yyy@qq.com指接收的邮箱;我这里用的是QQ邮箱,-pw用的是授权码,而不是密码。授权码生成可在邮箱账号设置中找到,这里不过多赘述。

同时注意代码中各文件的路径设置。

中间if exist这段是用于判断txt文件是否存在,如果不存在,则创建对应的xtxt文件,并且将模板mail.txt中的常规事项复制到新创建的txt文件中。

保存代码为mail.bat文件,此时可以双击它,验证下是否成功发送邮件。 如果发送失败,可在blat.log中找到出错原因。 有些电脑没有配置blat,需要先到官网上下载解压,把解压后的4个文件存放到C:\Windows\System32中。 高效能人士必备:windows开机自启动任务startTask.bat中调用mail.bat

call "C:\Users\AppData\Roaming\Microsoft\Windows\myBats\mail.bat"

双击运行startTask.bat,若运行成功,则可收到邮件。

这里的mail.bat文件同样要注意中文的问题,记得编码格式改为ANSI

2.2.3 弹窗显示一条读书笔记

将对象平时写的读书笔记整合到一个txt文件中,命名为book.txt,这里一行就是一条笔记。 高效能人士必备:windows开机自启动任务 这里用pygame来将文字转为图片,bookTip2Pic.py代码如下:

#载入必要的模块
import pygame
import time
import random
import linecache
import re
import cv2

date_time=time.strftime("%Y%m%d_%H%M%S", time.localtime())

# 随机选取第rdl条笔记
count=-1
for count, line in enumerate(open(r"E:\读书笔记txt版本\book.txt",'rb')):
	count+=1
rdl=random.randint(1, count)
print(rdl)
text = linecache.getline("E:/读书笔记txt版本/book.txt", rdl)

# pygame初始化
pygame.init()
screen = pygame.display.set_mode((1024, 720), pygame.RESIZABLE)
# 待转换文字,先去除尾部的回车符
utext = text.replace('\n', '') 
# 15个字为一行,以便多行展示
utext = re.sub(r"(.{15})", "\\1\r\n", utext)
print(text)
#设置字体
font = pygame.font.SysFont('microsoft yahei', 38)
lines = utext.splitlines()
for i, l in enumerate(lines):
    screen.blit(font.render(l, 0, (65, 83, 130),(255,255,255)), (10, 50 + 64*i))
#渲染图片
ftext = font.render(utext, 1, (65, 83, 130),(255, 255, 255))
#保存图片
path='E:\\bookPics\\'+date_time+'.jpg'
# 保存图片
pygame.image.save(screen, path)
pygame.quit()

# 打开图片
imgshow=cv2.imread(path)
cv2.imshow("imgshow", imgshow)
cv2.waitKey(0)
cv2.destroyAllWindows()

cmd运行python bookTip2Pic.py,可看到弹出图片: 高效能人士必备:windows开机自启动任务 这里样式比较简陋,有时间可以再调调参数美化一下。

最后一步就是在startTask.bat中调用py:

python "C:\Users\AppData\Roaming\Microsoft\Windows\myBats\bookTip2Pic.py"

再次提醒:startTask.bat必须放在2.2.1中提到的开机启动目录下。

3、结语

至此,3个小要求已基本完成,只需要重启验证一下就好啦。

当然,写脚本的同时,我还给对象买了新的笔记本电脑,从根源上解决了问题~