简单的windows锁屏工具(自律必备!)

简单的Windows锁屏工具

前言

​ 最近因为期末的原因,手头有不少的课设,所以直接干脆搬到实验室复习,然后在做实验做课设之余,也会看一些复习的内容。但是,在看复习内容的时候也难免不会说,去没事瞅两眼电脑啥的。后来,我说不行啊,我得像个办法,治治这个东西。所以我就想到写一个windows的锁屏工具。这里我们就来简单介绍一下他的编写,以及分享一下简单的源代码。

​ –青花

运行环境

python3版本以上,本人的是python3.7

需要用到的第三方库

Image 直接pip下载就OK了。

其实也可以锁屏用pywin32里面windows的API也OK。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# coding=utf-8
import tkinter
import threading
import time
import random
import datetime
from ctypes import *
from os.path import exists
from PIL import Image, ImageTk

def background():
win=tkinter.Tk()
width=win.winfo_screenwidth()
height=win.winfo_screenheight()
image = Image.open('C:/Users/Administrator/Desktop/1.jpg')
photo = ImageTk.PhotoImage(image.resize((width,height)))
label =tkinter.Label(win)
a='both'
label.pack(expand='YES',fill=a)
label.configure(image = photo )
win.geometry("+0+0")
win.wm_attributes('-topmost',1)
win.wm_attributes('-alpha',0.4)
win.mainloop()
return win

def lockscern(c):
user32 = windll.LoadLibrary('user32.dll')
user32.BlockInput(True)
time.sleep(int(c)*60)
user32.BlockInput(False)



def countertime(names,times):
flag=True
start=time.ctime()
runtime=time.time()
d1 = datetime.datetime.strptime('2019-12-21 00:00:00', '%Y-%m-%d %H:%M:%S')
d2=datetime.datetime.now()
disdate=d1-d2
workhard=['行百里者半九十','真正的才智是刚毅的志向。',"故天将降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤,行拂乱其所为,增益其所不能。","古之成大事者,不惟有超世之才,亦必有坚忍不拔之志","书山有路勤为径,学海无涯苦作舟。","不登高山,不知天之高也;不临深谷,不知地之厚也;不闻先王之遗言,不知学问之大也。","浅薄的学识是一件危险的事情。","当你尽了自己的最大努力时,失败也是伟大的。","当一个人先从自己的内心开始奋斗,他就是个有价值的人。","嘲讽是一种力量,消极的力量。赞扬也是一种力量,但却是积极的力量。","环境不会改变,解决之道在于改变自己。","没有比脚更长的路,没有比人更高的山。","若不给自己设限,则人生中就没有限制你发挥的藩篱。","每一发奋努力的背后,必有加倍的赏赐。","与其临渊羡鱼,不如退而结网。","有事者,事竟成;破釜沉舟,百二秦关终归楚;苦心人,天不负;卧薪尝胆,三千越甲可吞吴。","人生重要的不是所站的位置,而是所朝的方向。","没有一种不通过蔑视、忍受和奋斗就可以征服的命运。","构成我们学习最大障碍的是已知的东西,而不是未知的东西。","信心来自于实力,实力来自于勤奋。","不要等待机会,而要创造机会。","永远不要以粗心为借口原谅自我。","成功的法则极为简单,但简单并不代表容易。","如果要挖井,就要挖到水出为止。","所有的胜利,与征服自我的胜利比起来,都是微不足道。","宝剑锋从磨砺出,梅花香自苦寒来","如果缺少破土面出并与风雪拚搏的勇气,种子的前途并不比落叶美妙一分。","瀑布跨过险峻陡壁时,才显得格外雄伟壮观。","学习本无底,前进莫徬徨。"]

while 1:
run1time=time.time()
distime=run1time-runtime
thistime=round((distime/60),2)
time.sleep(3)
page=random.randint(0,len(workhard)-1)
print("********************************************************************************")
print("\n")
print("该任务名称为: ",names," 今天是",d2.year,"年",d2.month,"月",d2.day,"日")
print("\n")
print("该任务开始时间为: ",start," 距离考研还有: ",disdate.days,"天")
print("\n")
print("当前时间为: ",time.ctime())
print("\n")
print("当前任务进行的时间为: ",thistime,"分钟")
print("\n")
print("距离任务结束时间还有: ",round(times-thistime,2),"分钟")
print("\n")
print("你要知道的:",workhard[page],"\n")
print("********************************************************************************")
if int(distime/60)==times:
print("任务完成!\n")
inputflies(names,times,start)
print("已经将任务结果写入文件log\n")
print("已成功完成任务,请点击关闭右上角透明浮窗,退出程序!")
break
#next()





def inputflies(names,times,stime):

if not exists('tasklog.txt') :
with open("tasklog.txt",'a+') as f:
title='任务名称 任务时长(分钟) 任务开始时间'
text=str(names)+' '+str(times)+' '+str(stime)
f.write(title+'\n')
f.write(text+'\n')

if exists('tasklog.txt') :
with open("tasklog.txt",'a+') as f:
text=str(names)+' '+str(times)+' '+str(stime)
f.write(text+'\n')



def start():
flag=True
while flag :
print("本程序一旦启动会将日志写入当前文件夹下,您可以在任务结束之后进行文件查看,任务结束后会退出程序")
print("欢迎使用考研自律程序,现在请您输入任务信息!\n")
print("作者:青花@Blue_And_White")
taskname=str(input("请输入任务名称:\n"))
tasktime=int(input("请输入任务时间(分钟):\n"))
print("警告,一旦程序启动程序电脑鼠标键盘将被锁死,并且无法退出,请您再三考虑!如果现在退出请输入exit!\n")

ok=input("是否确认输入?\n确认 y 不确认 n 退出exit\n")

if str(ok) == 'exit':
exit()
if str(ok) == 'y':
break
return taskname,tasktime


def popthread(t):
for i in t:

if i==0:
i.start()
if i!=1:
i.setDaemon(False)
i.start()



def main():

thr=[]
taskname,tasktime=start()
t1=threading.Thread(target=countertime,args=(taskname,tasktime,))
thr.append(t1)
t2=threading.Thread(target=lockscern,args=(tasktime,))
thr.append(t2)
t3=threading.Thread(target=background,args=())
thr.append(t3)
popthread(thr)


r'''def next():

print("当前一次任务结束是否选择进入下一次任务?\n")
f=input("输入 next 下一次任务,输入 exit 退出!\n")

print("请点击右上角关闭透明浮窗,程序向下进行.\n")
if str(f)== 'exit':
exit()
if str(f)== 'next':
main()
if str(f) not in ['next','exit']:
print("输入错误,程序退出!\n")'''


if __name__ == "__main__":


main()

代码说明测试

除此之外,来说一下总体思路,本来我是打算设计的更加人性化一点的,直接上GUI,叫用户体验更好,由于比较忙,没有太多的时间去做,GUI,然后就单算直接做一个命令行DOS界面的程序先用着吧。然后结合系统的实时时间来说实时提示,然后利用windows的API来禁止I/O输入,从而达到锁屏的效果。然后为了叫用户体验更家好点,不至于看着一个DOS界面那么无聊,可以往桌面放一张名字为1.jpg的图片当背景。

这里我们在途中发现了一个问题,这里剩余时间已经出现了负数,这里的问题就是线程不同步,两个线程不是特别同步一般会差个零点几秒,我会在日后有时间想办法解决这个问题。

这里我们任务执行结束之后,关闭窗口,我们可以看到当前目录这里有一个txt文件来记录日志。

  • 1562487478643

1562487522606

最后pyinstaller 打包成EXE windows64位系统都可以用。

1562487541229

我把源代码放到了github上面,需要的可以去下载下来玩一下。

https://github.com/Blue-And-White/windows-

总结

总的来说这个程序用到了多线程来分别开一个锁屏计时器,另外还有一个动态更新时间内容,然后开一个GUI图层来遮挡,程序运行过程中有一些小bug比如说线程的问题,总的来说功能基本可以实现,因为要考研啥的,就业没有太多的去把问题解决完,但是基本上我们可以用了,如果您有兴趣可以对代码进行修改叫他性能更加强悍,也是再次拿python练了练手,还不错。