# ScreenChangeShockDevice **Repository Path**: itjee/ScreenChangeShockDevice ## Basic Information - **Project Name**: ScreenChangeShockDevice - **Description**: Python屏幕监视器是一个自动化工具,能够实时监控屏幕指定区域的变化并在检测到变化后自动点击。该工具基于PySide6构建图形界面,使用mss进行屏幕截图,numpy进行图像差异检测,pynput和ctypes控制鼠标操作。主要功能包括:自由选择监视区域、设置延迟点击时间、控制点击次数、快捷键操作等。适用于游戏辅助、自动化测试等场景。通过差异检测算法,程序能精准定位变化位置并执行点击操作,提供高效的自动化解决方案。 - **Primary Language**: Python - **License**: MulanPSL-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-04-27 - **Last Updated**: 2026-04-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Python屏幕监视器 - 自动检测屏幕变化并点击 ## 项目简介 本项目是一个基于Python开发的屏幕监视器工具,能够实时监控屏幕指定区域的变化,并在检测到变化后自动点击变化位置。该工具适用于需要自动化点击的场景,如游戏辅助、自动化测试等。 ## 功能特点 - ✅ **区域选择**:自由选择屏幕上的监视区域,支持拖动和调整大小 - ✅ **变化检测**:实时检测屏幕区域的变化 - ✅ **自动点击**:检测到变化后自动点击变化位置 - ✅ **延迟设置**:可设置发现变化后的延迟点击时间 - ✅ **次数控制**:可设置第几次变化才开始点击 - ✅ **快捷键支持**:F1打开监视区域,F2开始监控 - ✅ **图形界面**:基于PySide6的现代化GUI界面 ## 技术栈 - **PySide6**:Qt框架的Python绑定,用于构建图形界面 - **mss**:高性能屏幕截图库 - **numpy**:用于图像处理和差异检测 - **pynput**:鼠标控制库 - **ctypes**:Windows API调用,用于更精确的鼠标控制 ## 环境搭建 ### 1. 安装Python 确保已安装Python 3.8或更高版本。 ### 2. 安装依赖库 创建虚拟环境(推荐): ```bash python -m venv venv venv\Scripts\activate ``` 安装项目依赖: ```bash pip install -r requirements.txt ``` 或手动安装: ```bash 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. 启动程序 运行主程序: ```bash python mian.py ``` ![**\[图片位置1:程序启动界面截图\]**](https://i-blog.csdnimg.cn/direct/2936c7616189405e86bf124453904c28.png) *说明:显示程序主界面,包含延迟时间设置、次数设置、截屏确定区域按钮和关于按钮* ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/5d49e86831cd43f7b1a73624f6e40e0b.png) ### 2. 设置参数 在主界面可以设置以下参数: - **延迟时间**:发现变化后多少秒进行点击(单位:秒),可能比设置的慢 20ms ~ 40ms 之间 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6e207689d4d84918a440fde57372feb9.png) - **第几次变化开始点击**:设置第几次检测到变化时才执行点击操作,比如一下是 第 2 次变化,我点击F2后开始对透明黑区域进行监测,我点击开始从“ 蓝 ” -> “ 红 ” 为第 1 次,不会点击屏幕,但是 从“ 红 ” -> “ 绿 ” 为第二次就出现了点击,代码延迟大概30ms ~ 50 ms之间 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/c490f38246fe47bf899fdc509fad8e1f.gif) ### 3. 选择监视区域 有两种方式打开监视区域窗口: ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6bcfb60e2739486a93f0ae1c2e611b3c.png) - 点击「截屏确定区域」按钮 - 按下 **F1** 快捷键 打开监视区域窗口后: ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d43816946d1d450cad810794ba5fc5d9.png) - 拖动窗口到想要监控的位置 - 拖动窗口边缘调整监视区域大小 - ``右键``点击监视区域可关闭窗口 ### 4. 开始监控 在监视区域窗口中,按下 **F2** 键开始监控。 程序会: 1. 等待监视区域第一次发生变化(表示用户开始操作) 2. 根据设置的"第几次变化开始点击"参数,在相应次数时执行点击 3. 检测到变化后,在变化位置延迟指定时间后点击 4. 点击完成后自动返回主界面 **[图片位置5:监控过程截图]** *说明:展示监控过程中监视区域的实时状态* **[图片位置6:检测到变化并点击的截图]** *说明:展示检测到变化后自动点击的效果* ### 5. 快捷键说明 | 快捷键 | 功能 | |--------|------| | F1 | 打开/显示监视区域 | | F2 | 开始监控 | | 右键 | 关闭监视区域 | ## 核心代码解析 ### 1. 主窗口 (main_window.py) 主窗口负责程序的UI展示和用户交互: ```python class MainWindow(QWidget): def __init__(self): super().__init__() self.load_ui() # 加载UI文件 self.setWindowTitle("主窗口") self.connect_signals() # 连接信号槽 self.rect = None self.setup_shortcuts() # 设置快捷键 ``` **[图片位置7:main_window.py代码截图]** *说明:展示主窗口类的初始化代码* ### 2. 屏幕监视核心 (monitor/monitor.py) 监视模块使用mss进行屏幕截图,numpy进行图像差异检测: ```python 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 ``` **[图片位置8:差异检测核心代码截图]** *说明:展示屏幕差异检测和自动点击的核心逻辑* ### 3. 鼠标控制 使用ctypes调用Windows API进行精确的鼠标控制: ```python 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)) ``` **[图片位置9:鼠标点击控制代码截图]** *说明:展示使用Windows API进行鼠标控制的代码* ## 工作原理 ### 监视流程 1. **初始化阶段**:用户选择监视区域,设置延迟时间和点击次数 2. **等待阶段**:程序等待监视区域第一次发生变化 3. **计数阶段**:根据设置的次数参数,计数变化次数 4. **检测阶段**:实时检测屏幕变化 5. **响应阶段**:检测到变化后,延迟指定时间,点击变化位置 6. **返回阶段**:点击完成后返回主界面 **[图片位置10:工作流程图]** *说明:展示程序的工作流程图,从启动到完成监控的完整过程* ### 差异检测算法 程序使用numpy进行像素级差异检测: - 截取监视区域当前帧 - 与上一帧进行像素对比 - 找到第一个变化的像素位置 - 计算该像素在屏幕上的绝对坐标 - 在该位置执行点击操作 **[图片位置11:差异检测原理图]** *说明:展示差异检测的原理,包括像素对比和坐标转换* ## 常见问题 ### 1. 延迟时间不准确 延迟时间为理论值,实际响应时间可能会稍长一些,这是由于: - 屏幕截图和图像处理需要时间 - 系统调度和鼠标操作有延迟 ### 2. 监视区域无法显示 确保: - 已正确安装PySide6 - main_window.ui文件存在于程序目录 - 程序有足够的权限 ### 3. 点击位置不准确 可能原因: - 屏幕缩放设置影响 - 多显示器环境下的坐标计算 - 解决方法:调整屏幕缩放为100% ## 应用场景 - **游戏辅助**:自动检测游戏画面变化并点击 - **自动化测试**:监控界面变化并触发操作 - **监控告警**:检测屏幕特定区域的变化 - **办公自动化**:自动响应界面变化 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/e04e31ebcbfc42019d09a09e5970d7ce.gif) *说明:展示程序在不同场景下的应用示例* ## 总结 本屏幕监视器工具通过结合PySide6、mss、numpy等技术,实现了高效的屏幕变化检测和自动点击功能。程序具有界面友好、操作简单、响应迅速等特点,适用于多种自动化场景。 ## 源码获取 完整源码已上传至GitHub,欢迎Star和Fork! ```bash github地址:https://github.com/mojoin/ScreenChangeShockDevice gitee地址:https://gitee.com/lclIzzxw/ScreenChangeShockDevice ``` ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/33e7724580154bca8c9a594692916cc8.png) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d5a8f653fb64461fbacae63b8fbdfe71.png) ## 软件直接下载 ```bash 蓝奏云下载: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 ``` ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/933430de53624521beff468d77ed676d.png) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/c797faeb37764903a21b5739a53672c2.png) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/88dfd366bf264b1d849687483c732531.png) --- ## 相关推荐 - [PySide6官方文档](https://doc.qt.io/qtforpython/) - [mss库文档](https://python-mss.readthedocs.io/) - [numpy官方文档](https://numpy.org/doc/) --- **注意**:本工具仅供学习和研究使用,请勿用于违反游戏规则或其他不当用途。