不熟悉论坛的排版设置,所以下面可能会有点乱,见谅。
自学不久,请大佬指教
u盘解锁/锁屏
https://www.52pojie.cn/thread-1743647-1-1.html
U盘解锁/锁屏
朋友说教室的电子白板,课间会有学生到讲台搞,于是设置了密码,然后将密码发给各科老师,
密码也告诉班长(怕各科老师忘记)。不用多久,很多人知道密码了,再改密码……如此反复操作。
于是我弄了这个小软件。开始想着弄成检测U盘必须要有某个指定内容的文件才解锁的,后来想着要将那个文件放到各人的U盘,有点麻烦,所以就不那样弄,现在弄成任何U盘都可以使用。
(出处: 吾爱破解论坛)
看到上面的帖子,然后按照自己的想法用python修改了一下。以下是我的作品。
具体功能就是在开机的时候必须要插入一个U盘,开机后如果拔出U盘就屏蔽键盘和鼠标的操作,看起来像假死。插入同一个U盘后就会恢复正常。
脑补一下适用场景:有一台公用电脑,锁屏密码大家都知道。当我需要使用时我就插入U盘然后开机,当我临时走掉的时候不用关机,只需要拔出U盘,此时键盘和鼠标操作就无效了。
场景限制:不适用于多人轮换使用电脑的场景,除非每个人都带个U盘,并且随手关机,当然也可以改代码设定延时关机。
更多玩法需要自行探索
具体的很多细节就没有再多想了,我用不上,如果有需要可以自改或者提出来。
使用方法:把程序设置管理员权限,并设置好系统开机自启就行了,程序运行没有窗口,不会提示,简单看看
主要用到的函数:
psutil.disk_partitions()用于获取分区列表
win32api.GetVolumeInformation()用于获取硬盘序列号
os.system("shutdown -s -f -t 0")用于关机
windll.user32.BlockInput(True/False)用于禁用/启用键盘鼠标由于这个功能不屏蔽ctrl+alt+del,并且屏蔽会被中断,所以在使用时加入了无限判断循环达到持续屏蔽的效果
成品在最后
[Python] 纯文本查看 复制代码 from psutil import disk_partitions
from win32api import GetVolumeInformation
from ctypes import windll
from os import system
from time import sleep
disk_old = []
disk_new = []
# 获取刚开机时候的U盘序列号
def old_seriaNumber():
global disk_old
for item in disk_partitions():
if "removable" in item.opts:
disk_old.append(GetVolumeInformation(item.mountpoint)[1])
return disk_old
# 更新获取U盘序列号
def new_seriaNumber():
global disk_new
disk_new = []
for item in disk_partitions():
if "removable" in item.opts:
try:
disk_new.append(GetVolumeInformation(item.mountpoint)[1])
except:
pass
return disk_new
# 开机先判断是否插入U盘,没插就关机
if old_seriaNumber() == []:
system("shutdown -s -f -t 0")
else:
# 如果插入就循环获取U盘是否有拔插
while True:
sleep(0.001)
# 判断实时获取的U盘列表和刚开机时的U盘列表是否有交集,如果有就代表教师U盘仍旧保持插入
if list(set(new_seriaNumber()).intersection(disk_old)) != []:
pass
else:
# 没有交集代表开机U盘已经拔出,就直接假死,屏蔽键盘和鼠标
windll.user32.BlockInput(True)
# 循环判断是否插入U盘,并且用循环达到持续屏蔽键盘和鼠标
while True:
sleep(0.001)
# 依判断实时获取的U盘列表和刚开机时的U盘列表是否有交集
if list(set(new_seriaNumber()).intersection(disk_old)) != []:
windll.user32.BlockInput(False)
break
else:
windll.user32.BlockInput(True)
成品下载链接:https://www.123pan.com/s/TctA-Cs5j.html |