欢迎光临
我们一直在努力

Python屏幕监视器 - 自动检测屏幕变化并点击

Python屏幕监视器 – 自动检测屏幕变化并点击

项目简介

本项目是一个基于Python开发的屏幕监视器工具,能够实时监控屏幕指定区域的变化,并在检测到变化后自动点击变化位置。该工具适用于需要自动化点击的场景,如游戏辅助、自动化测试等。

功能特点

  • ✅ 区域选择:自由选择屏幕上的监视区域,支持拖动和调整大小
  • ✅ 变化检测:实时检测屏幕区域的变化
  • ✅ 自动点击:检测到变化后自动点击变化位置
  • ✅ 延迟设置:可设置发现变化后的延迟点击时间
  • ✅ 次数控制:可设置第几次变化才开始点击
  • ✅ 快捷键支持:F1打开监视区域,F2开始监控
  • ✅ 图形界面:基于PySide6的现代化GUI界面

技术栈

  • PySide6:Qt框架的Python绑定,用于构建图形界面
  • mss:高性能屏幕截图库
  • numpy:用于图像处理和差异检测
  • pynput:鼠标控制库
  • ctypes:Windows API调用,用于更精确的鼠标控制

环境搭建

1. 安装Python

确保已安装Python 3.8或更高版本。

2. 安装依赖库

创建虚拟环境(推荐):

python -m venv venv
venv\\Scripts\\activate

安装项目依赖:

pip install -r requirements.txt

或手动安装:

pip install mss==10.1.0
pip install numpy==2.4.1
pip install pynput==1.8.1
pip install PySide6==6.10.1

项目结构

屏幕监视器/
├── mian.py # 程序入口
├── main_window.py # 主窗口逻辑
├── main_window.ui # UI界面文件
├── monitor/ # 监视模块
│ ├── __init__.py
│ └── monitor.py # 屏幕监视核心逻辑
├── screenSelection/ # 区域选择模块
│ ├── __init__.py
│ └── screenSelection.py # 区域选择窗口
├── monitor.png # 程序图标
├── monitor.ico # Windows图标
├── requirements.txt # 依赖列表
└── ScreenMonitor.spec # PyInstaller打包配置

使用说明

1. 启动程序

运行主程序:

python mian.py

**[图片位置1:程序启动界面截图]**

说明:显示程序主界面,包含延迟时间设置、次数设置、截屏确定区域按钮和关于按钮 在这里插入图片描述

2. 设置参数

在主界面可以设置以下参数:

  • 延迟时间:发现变化后多少秒进行点击(单位:秒),可能比设置的慢 20ms ~ 40ms 之间

在这里插入图片描述

  • 第几次变化开始点击:设置第几次检测到变化时才执行点击操作,比如一下是 第 2 次变化,我点击F2后开始对透明黑区域进行监测,我点击开始从“ 蓝 ” -> “ 红 ” 为第 1 次,不会点击屏幕,但是 从“ 红 ” -> “ 绿 ” 为第二次就出现了点击,代码延迟大概30ms ~ 50 ms之间

在这里插入图片描述

3. 选择监视区域

有两种方式打开监视区域窗口:

在这里插入图片描述

  • 点击「截屏确定区域」按钮
  • 按下 F1 快捷键

打开监视区域窗口后:

在这里插入图片描述

  • 拖动窗口到想要监控的位置
  • 拖动窗口边缘调整监视区域大小
  • 右键点击监视区域可关闭窗口

4. 开始监控

在监视区域窗口中,按下 F2 键开始监控。

程序会:

  • 等待监视区域第一次发生变化(表示用户开始操作)
  • 根据设置的"第几次变化开始点击"参数,在相应次数时执行点击
  • 检测到变化后,在变化位置延迟指定时间后点击
  • 点击完成后自动返回主界面
  • 5. 快捷键说明

    快捷键功能
    F1 打开/显示监视区域
    F2 开始监控
    右键 关闭监视区域

    核心代码解析

    1. 主窗口 (main_window.py)

    主窗口负责程序的UI展示和用户交互:

    class MainWindow(QWidget):
    def __init__(self):
    super().__init__()
    self.load_ui() # 加载UI文件
    self.setWindowTitle("主窗口")
    self.connect_signals() # 连接信号槽
    self.rect = None
    self.setup_shortcuts() # 设置快捷键

    2. 屏幕监视核心 (monitor/monitor.py)

    监视模块使用mss进行屏幕截图,numpy进行图像差异检测:

    def diff_Monitor(self, img_start, start_time, parent):
    with mss.mss() as sct:
    while True:
    screenshot = sct.grab(self.monitor_region)
    img1 = np.array(screenshot)
    img1 = img1[:, :, :3]

    diff = img1 != img_start
    if diff.any():
    changed_indices = np.where(diff)
    y = changed_indices[0][0]
    x = changed_indices[1][0]
    screen_x = self.monitor_region["left"] + x
    screen_y = self.monitor_region["top"] + y
    time.sleep(self.delay)
    self.click_at(screen_x, screen_y, parent)
    break

    3. 鼠标控制

    使用ctypes调用Windows API进行精确的鼠标控制:

    def click_at(self, x, y, parent):
    screen_width = ctypes.windll.user32.GetSystemMetrics(0)
    screen_height = ctypes.windll.user32.GetSystemMetrics(1)

    abs_x = int(x * 65535 / screen_width)
    abs_y = int(y * 65535 / screen_height)

    # 使用SendInput进行鼠标点击
    inp = INPUT()
    inp.type = 0
    inp.mi = MOUSEINPUT(abs_x, abs_y, 0, 0x0001 | 0x8000, 0, 0)
    ctypes.windll.user32.SendInput(1, ctypes.byref(inp), ctypes.sizeof(INPUT))

    工作原理

    监视流程

  • 初始化阶段:用户选择监视区域,设置延迟时间和点击次数
  • 等待阶段:程序等待监视区域第一次发生变化
  • 计数阶段:根据设置的次数参数,计数变化次数
  • 检测阶段:实时检测屏幕变化
  • 响应阶段:检测到变化后,延迟指定时间,点击变化位置
  • 返回阶段:点击完成后返回主界面
  • 差异检测算法

    程序使用numpy进行像素级差异检测:

    • 截取监视区域当前帧
    • 与上一帧进行像素对比
    • 找到第一个变化的像素位置
    • 计算该像素在屏幕上的绝对坐标
    • 在该位置执行点击操作

    常见问题

    1. 延迟时间不准确

    延迟时间为理论值,实际响应时间可能会稍长一些,这是由于:

    • 屏幕截图和图像处理需要时间
    • 系统调度和鼠标操作有延迟

    2. 监视区域无法显示

    确保:

    • 已正确安装PySide6
    • main_window.ui文件存在于程序目录
    • 程序有足够的权限

    3. 点击位置不准确

    可能原因:

    • 屏幕缩放设置影响
    • 多显示器环境下的坐标计算
    • 解决方法:调整屏幕缩放为100%

    应用场景

    • 游戏辅助:自动检测游戏画面变化并点击
    • 自动化测试:监控界面变化并触发操作
    • 监控告警:检测屏幕特定区域的变化
    • 办公自动化:自动响应界面变化

    在这里插入图片描述

    说明:展示程序在不同场景下的应用示例

    总结

    本屏幕监视器工具通过结合PySide6、mss、numpy等技术,实现了高效的屏幕变化检测和自动点击功能。程序具有界面友好、操作简单、响应迅速等特点,适用于多种自动化场景。

    源码获取

    完整源码已上传至GitHub,欢迎Star和Fork!

    github地址:https://github.com/mojoin/ScreenChangeShockDevice

    gitee地址:https://gitee.com/lclIzzxw/ScreenChangeShockDevice

    在这里插入图片描述

    在这里插入图片描述

    软件直接下载

    蓝奏云下载:https://wwaoc.lanzn.com/iftjI3h8cbzc
    密码:3k3z

    github下载:https://github.com/mojoin/ScreenChangeShockDevice/releases/tag/v1.0.0

    gitee下载:https://gitee.com/lclIzzxw/ScreenChangeShockDevice/releases/tag/v1.0.0

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述


    相关推荐

    • PySide6官方文档
    • mss库文档
    • numpy官方文档

    注意:本工具仅供学习和研究使用,请勿用于违反游戏规则或其他不当用途。

    赞(0)
    未经允许不得转载:171主机测评 » Python屏幕监视器 - 自动检测屏幕变化并点击
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址