U盘解锁/锁屏——修改于坛友思路

查看 109|回复 9
作者:ifdess   
不熟悉论坛的排版设置,所以下面可能会有点乱,见谅。
自学不久,请大佬指教
u盘解锁/锁屏
https://www.52pojie.cn/thread-1743647-1-1.html
U盘解锁/锁屏
朋友说教室的电子白板,课间会有学生到讲台搞,于是设置了密码,然后将密码发给各科老师,
密码也告诉班长(怕各科老师忘记)。不用多久,很多人知道密码了,再改密码……如此反复操作。
于是我弄了这个小软件。开始想着弄成检测U盘必须要有某个指定内容的文件才解锁的,后来想着要将那个文件放到各人的U盘,有点麻烦,所以就不那样弄,现在弄成任何U盘都可以使用。
(出处: 吾爱破解论坛)
看到上面的帖子,然后按照自己的想法用python修改了一下。以下是我的作品。
[i]
[i]
具体功能就是在开机的时候必须要插入一个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

屏蔽, 鼠标

lyie15   

win系统里有个用户系统,可以为每个老师设置一个他的专属密码,这样就不怕乱传了,外加老师也是有手机的,把密码收藏到微信群里,这样就不用交给学生了
怕老师忘记密码,比让老师每次上课都去要带一个U盘更加方便吧
bfm0755   

如果是在教室的电脑上搞一个屏幕保护,显示一个二维码,给老师授权后,老师使用手机微信扫码就可以打开电脑,否则就打不开。因为使用U盘还是有点麻烦,而且不能的老师也不会每天随时带U盘,但是手机一定是带的。
德德哥   

检测U盘必须要有某个指定内容的文件才解锁的,感觉很实用,期待楼主更新一版,谢谢
WUWUCOOL   

检测U盘必须要有某个指定内容的文件才解锁的,这个很喜欢啊。自己的电脑在公司,这样不必担心乱用。
q314956820   


德德哥 发表于 2023-3-29 10:55
检测U盘必须要有某个指定内容的文件才解锁的,感觉很实用,期待楼主更新一版,谢谢

安全模式下 不会加载这个启动项  不过现在win10反而不容易进入安全模式了 哈哈
cong0601   

感觉很实用
FlyingO   

要是U盘坏掉了?要是没解锁下节课其他老师不能用?
MustafaDe   


bfm0755 发表于 2023-3-29 11:03
如果是在教室的电脑上搞一个屏幕保护,显示一个二维码,给老师授权后,老师使用手机微信扫码就可以打开电脑 ...

你这个想法挺好的,值得去实现
红蓝黄   

开始的时候,是不是把u盘插入再开机?
然后运行程序,就可以自动指定u盘?
如果再设置另一个u盘,是不是重复以上操作?
这样子的话,是不是可以指定N个u盘?
程序有没有窗口可以单独指定管理u盘的授权?方便管理
您需要登录后才可以回帖 登录 | 立即注册

返回顶部