核心内容摘要
ROFL-Player:英雄联盟回放解析工具的技术实践与价值挖掘
Python屏幕监视器 - 自动检测屏幕变化并点击项目简介本项目是一个基于Python开发的屏幕监视器工具能够实时监控屏幕指定区域的变化并在检测到变化后自动点击变化位置。
该工具适用于需要自动化点击的场景如游戏辅助、自动化测试等。
功能特点✅区域选择自由选择屏幕上的监视区域支持拖动和调整大小✅变化检测实时检测屏幕区域的变化✅自动点击检测到变化后自动点击变化位置✅延迟设置可设置发现变化后的延迟点击时间✅次数控制可设置第几次变化才开始点击✅快捷键支持F1打开监视区域F2开始监控✅图形界面基于PySide6的现代化GUI界面技术栈PySide6Qt框架的Python绑定用于构建图形界面mss高性能屏幕截图库numpy用于图像处理和差异检测pynput鼠标控制库ctypesWindows API调用用于更精确的鼠标控制环境搭建
安装Python确保已安装Python
8或更高版本。
安装依赖库创建虚拟环境推荐python-mvenv venv venv\Scripts\activate安装项目依赖pipinstall-rrequirements.txt或手动安装pipinstallmss
10.
0 pipinstallnumpy
2.
1 pipinstallpynput
1.
1 pipinstallPySide
66.
1
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打包配置使用说明
启动程序运行主程序python mian.py说明显示程序主界面包含延迟时间设置、次数设置、截屏确定区域按钮和关于按钮
设置参数在主界面可以设置以下参数延迟时间发现变化后多少秒进行点击单位秒,可能比设置的慢 20ms ~ 40ms 之间第几次变化开始点击设置第几次检测到变化时才执行点击操作比如一下是 第 2 次变化我点击F2后开始对透明黑区域进行监测我点击开始从“ 蓝 ” - “ 红 ” 为第 1 次不会点击屏幕但是 从“ 红 ” - “ 绿 ” 为第二次就出现了点击代码延迟大概30ms ~ 50 ms之间
选择监视区域有两种方式打开监视区域窗口点击「截屏确定区域」按钮按下F1快捷键打开监视区域窗口后拖动窗口到想要监控的位置拖动窗口边缘调整监视区域大小右键点击监视区域可关闭窗口
开始监控在监视区域窗口中按下F2键开始监控。
程序会等待监视区域第一次发生变化表示用户开始操作根据设置的第几次变化开始点击参数在相应次数时执行点击检测到变化后在变化位置延迟指定时间后点击点击完成后自动返回主界面
快捷键说明快捷键功能F1打开/显示监视区域F2开始监控右键关闭监视区域核心代码解析
主窗口 (main_window.py)主窗口负责程序的UI展示和用户交互classMainWindow(QWidget):def__init__(self):super().__init__()self.load_ui()# 加载UI文件self.setWindowTitle(主窗口)self.connect_signals()# 连接信号槽self.rectNoneself.setup_shortcuts()# 设置快捷键
屏幕监视核心 (monitor/monitor.py)监视模块使用mss进行屏幕截图numpy进行图像差异检测defdiff_Monitor(self,img_start,start_time,parent):withmss.mss()assct:whileTrue:screenshotsct.grab(self.monitor_region)img1np.array(screenshot)img1img1[:,:,:3]diffimg1!img_startifdiff.any():changed_indicesnp.where(diff)ychanged_indices[0][0]xchanged_indices[1][0]screen_xself.monitor_region[left]x screen_yself.monitor_region[top]y time.sleep(self.delay)self.click_at(screen_x,screen_y,parent)break
鼠标控制使用ctypes调用Windows API进行精确的鼠标控制defclick_at(self,x,y,parent):screen_widthctypes.windll.user
GetSystemMetrics(
screen_heightctypes.windll.user
GetSystemMetrics(
abs_xint(x*65535/screen_width)abs_yint(y*65535/screen_height)# 使用SendInput进行鼠标点击inpINPUT()inp.type0inp.miMOUSEINPUT(abs_x,abs_y,0,0x0001|0x8000,0,
ctypes.windll.user
SendInput(1,ctypes.byref(inp),ctypes.sizeof(INPUT))工作原理监视流程初始化阶段用户选择监视区域设置延迟时间和点击次数等待阶段程序等待监视区域第一次发生变化计数阶段根据设置的次数参数计数变化次数检测阶段实时检测屏幕变化响应阶段检测到变化后延迟指定时间点击变化位置返回阶段点击完成后返回主界面差异检测算法程序使用numpy进行像素级差异检测截取监视区域当前帧与上一帧进行像素对比找到第一个变化的像素位置计算该像素在屏幕上的绝对坐标在该位置执行点击操作
常见问题
延迟时间不准确延迟时间为理论值实际响应时间可能会稍长一些这是由于屏幕截图和图像处理需要时间系统调度和鼠标操作有延迟
监视区域无法显示确保已正确安装PySide6main_window.ui文件存在于程序目录程序有足够的权限
点击位置不准确可能原因屏幕缩放设置影响多显示器环境下的坐标计算解决方法调整屏幕缩放为100%应用场景游戏辅助自动检测游戏画面变化并点击自动化测试监控界面变化并触发操作监控告警检测屏幕特定区域的变化办公自动化自动响应界面变化说明展示程序在不同场景下的应用示例
总结本屏幕监视器工具通过结合PySide
mss、numpy等技术实现了高效的屏幕变化检测和自动点击功能。
程序具有界面友好、操作简单、响应迅速等特点适用于多种自动化场景。
源码获取完整源码已上传至GitHub欢迎Star和Forkgithub地址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/v
1.
0 gitee下载:https://gitee.com/lclIzzxw/ScreenChangeShockDevice/releases/tag/v
1.