您当前的位置:首页 > 计算机 > 编程开发 > Python

电脑一动键鼠就锁屏 Python 源代码

时间:07-31来源:作者:点击数:
城东书院 www.cdsy.xyz

电脑一动键鼠就锁屏 Python 源代码

使用方法:

1.软件开启后,可以通过ALT+L快捷键循环开启或关闭监听,无需每次重启软件

2.软件开启后,按ALT+L → 2秒后进入监听模式,一旦被他人移动鼠标/按任意键 → 立即锁屏并停止监听,防止他们窥屏

3.如果未锁屏,可再按ALT+L取消监听以正常使用电脑

4.如果被人动了电脑触发了锁屏,正常解锁电脑后程序已自动停止监听可正常使用电脑,等下次再按ALT+L开启监听就行了。

5.ALT+L快捷键为全局建,程序在后台时仍可触发,可通过点击界面“退出程序”退出进程。

源代码:

import ctypes
import threading
import time
from pynput import mouse, keyboard
import tkinter as tk
from tkinter import ttk
 
def lock_screen():
    ctypes.windll.user32.LockWorkStation()
 
class LockScreenGuard:
    def __init__(self):
        self.root = tk.Tk()
        self.root.title("WinLLock")
        self.root.geometry("300x150")
        self.root.resizable(False, False)
         
        # 状态变量
        self.is_listening = False
        self.alt_pressed = False
        self.last_alt_l_time = 0
        self.activation_delay = 2.0
         
        # 初始化UI
        self.setup_ui()
         
        # 启动监听
        self.keyboard_listener = keyboard.Listener(
            on_press=self.on_key_press, 
            on_release=self.on_key_release
        )
        self.keyboard_listener.start()
        self.mouse_listener = None
         
        self.root.mainloop()
 
    def setup_ui(self):
        self.status_var = tk.StringVar(value="当前状态: 等待ALT+L")
        status_label = ttk.Label(self.root, textvariable=self.status_var, font=("Arial", 12))
        status_label.pack(pady=20)
         
        exit_button = ttk.Button(self.root, text="退出程序", command=self.safe_exit)
        exit_button.pack(side="bottom", pady=10)
 
    def on_key_press(self, key):
        # 检测ALT键按下
        if key == keyboard.Key.alt_l or key == keyboard.Key.alt_r:
            self.alt_pressed = True
         
        # 检测L键按下且ALT已按下(ALT+L组合)
        elif self.alt_pressed and key == keyboard.KeyCode.from_char('l'):
            current_time = time.time()
             
            # 关键修改:监听状态下按ALT+L关闭监听 [4](@ref)
            if self.is_listening:
                self.stop_listening()
                return
                 
            # 首次触发或超过延时窗口
            if current_time - self.last_alt_l_time > self.activation_delay:
                self.last_alt_l_time = current_time
                self.start_listening_after_delay()
         
        # 监听模式下非ALT+L的任意按键触发锁屏
        elif self.is_listening:
            self.trigger_lock()
 
    def on_key_release(self, key):
        if key == keyboard.Key.alt_l or key == keyboard.Key.alt_r:
            self.alt_pressed = False
 
    def on_mouse_move(self, x, y):
        if self.is_listening:
            self.trigger_lock()
 
    def on_mouse_click(self, x, y, button, pressed):
        if self.is_listening and pressed:
            self.trigger_lock()
 
    def start_listening_after_delay(self):
        self.status_var.set("状态: 计时2秒...")
        threading.Timer(self.activation_delay, self.activate_listening).start()
 
    def activate_listening(self):
        if not self.is_listening:
            self.is_listening = True
            self.mouse_listener = mouse.Listener(
                on_move=self.on_mouse_move, 
                on_click=self.on_mouse_click
            )
            self.mouse_listener.start()
            self.status_var.set("状态: 开始 ")
 
    def stop_listening(self):
        """关闭监听状态(新增方法)[4](@ref)"""
        if self.is_listening:
            self.is_listening = False
            if self.mouse_listener:
                self.mouse_listener.stop()
            self.status_var.set("状态: 关闭")
            self.last_alt_l_time = time.time()  # 重置计时器
 
    def trigger_lock(self):
        lock_screen()
        self.stop_listening()  # 改为调用统一方法
        self.status_var.set("状态: 已关闭")
 
    def safe_exit(self):
        self.stop_listening()
        if self.keyboard_listener:
            self.keyboard_listener.stop()
        self.root.destroy()
 
if __name__ == "__main__":
    guard = LockScreenGuard()

成品链接:

https://pan.baidu.com/s/1hS0L7ywf5NKTXVpfMBFaLg?pwd=xf7n 提取码: xf7n

城东书院 www.cdsy.xyz
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐