pip install opencv-python pynput
import cv2
from pynput import mouse, keyboard
import os
import time
import sys
import ctypes
import threading
import tkinter as tk
# 全局状态
monitoring_active = False
done = False
root = None
status_dot = None
timer_id = None
def capture_and_lock_process():
global done
target_dir = r"D:\Desktop\wtf"
if not os.path.exists(target_dir):
os.makedirs(target_dir, exist_ok=True)
# 第一张:预热并展示
cap = cv2.VideoCapture(0)
if cap.isOpened():
for _ in range(30): cap.read()
ret, frame = cap.read()
if ret:
p1 = os.path.join(target_dir, f"show_{time.strftime('%H%M%S')}.jpg")
cv2.imwrite(p1, frame)
os.startfile(p1)
time.sleep(3)
cap.release()
# 第二张:静默捕获
cap = cv2.VideoCapture(0)
if cap.isOpened():
for _ in range(10): cap.read()
ret, frame = cap.read()
if ret:
p2 = os.path.join(target_dir, f"final_{time.strftime('%H%M%S')}.jpg")
cv2.imwrite(p2, frame)
cap.release()
# 锁屏并退出
ctypes.windll.user32.LockWorkStation()
os._exit(0)
# --- 悬浮色点逻辑 ---
def hide_dot():
global timer_id
if root:
root.withdraw()
timer_id = None
def show_dot_temporarily():
global timer_id
if root and status_dot:
if timer_id is not None:
root.after_cancel(timer_id)
color = "red" if monitoring_active else "green"
status_dot.config(bg=color)
root.deiconify()
timer_id = root.after(3000, hide_dot)
def create_gui():
global root, status_dot
root = tk.Tk()
root.overrideredirect(True)
root.attributes("-topmost", True)
root.geometry("15x15+10+10")
status_dot = tk.Label(root, bg="green")
status_dot.pack(expand=True, fill="both")
root.withdraw()
root.mainloop()
# --- 监听逻辑 ---
def toggle_monitoring():
global monitoring_active
monitoring_active = not monitoring_active
show_dot_temporarily()
def force_exit():
"""强制退出程序"""
print("\n[!] 收到退出指令,程序关闭。")
os._exit(0)
def on_press(key):
# F9 切换状态
if key == keyboard.Key.f9:
toggle_monitoring()
# 强制退出:这里设置为 Shift + F8
# 如果你坚持要单按 F8,就把 if 后的逻辑改为 key == keyboard.Key.f8
if key == keyboard.Key.f8:
force_exit()
def on_mouse_event(*args):
global done, monitoring_active
if monitoring_active and not done:
done = True
capture_and_lock_process()
def run_listeners():
# 建立键盘监听
k_listener = keyboard.Listener(on_press=on_press)
# 建立鼠标监听
m_listener = mouse.Listener(on_move=on_mouse_event, on_click=on_mouse_event)
k_listener.start()
m_listener.start()
k_listener.join()
if __name__ == "__main__":
# 启动监听线程
threading.Thread(target=run_listeners, daemon=True).start()
# 启动 GUI(主线程)
create_gui()