当前位置: 首页 > news >正文

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

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

项目简介

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

功能特点

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

技术栈

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

环境搭建

1. 安装Python

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

2. 安装依赖库

创建虚拟环境(推荐):

python-mvenv venv venv\Scripts\activate

安装项目依赖:

pipinstall-rrequirements.txt

或手动安装:

pipinstallmss==10.1.0 pipinstallnumpy==2.4.1 pipinstallpynput==1.8.1 pipinstallPySide6==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

说明:显示程序主界面,包含延迟时间设置、次数设置、截屏确定区域按钮和关于按钮

2. 设置参数

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

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

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

3. 选择监视区域

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

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

打开监视区域窗口后:

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

4. 开始监控

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

程序会:

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

5. 快捷键说明

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

核心代码解析

1. 主窗口 (main_window.py)

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

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

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

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

defdiff_Monitor(self,img_start,start_time,parent):withmss.mss()assct:whileTrue:screenshot=sct.grab(self.monitor_region)img1=np.array(screenshot)img1=img1[:,:,:3]diff=img1!=img_startifdiff.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进行精确的鼠标控制:

defclick_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=0inp.mi=MOUSEINPUT(abs_x,abs_y,0,0x0001|0x8000,0,0)ctypes.windll.user32.SendInput(1,ctypes.byref(inp),ctypes.sizeof(INPUT))

工作原理

监视流程

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

差异检测算法

程序使用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官方文档

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

http://www.jsqmd.com/news/315977/

相关文章:

  • 《写出优雅 Python 的秘密武器:深入理解上下文管理器,从文件到事务的全场景实战》
  • 2026年靠谱的多极管式滑触线/滑触线高口碑厂家推荐(评价高)
  • 2026年口碑好的楼地面变形缝/分仓缝变形缝品牌厂家推荐
  • 2026年知名的河北烧鸡/烧鸡哪家便宜
  • 2026年靠谱的浪涌保护器spd/T1级浪涌保护器厂家选择参考建议
  • 力扣-钥匙和房间
  • 2026年质量好的T1级后备保护器/防雷保护器行业内口碑厂家推荐
  • Python序列协议深度解析:从抽象类到自定义序列实现
  • 2026年知名的电商专供粉饼盒/方形粉饼盒厂家实力参考
  • 2026年知名的双层眼影盒/透明眼影盒热门厂家推荐汇总
  • 2026年靠谱的高灵敏度声波测井换能器/抗腐蚀声波测井换能器热门品牌厂家推荐
  • 机器学习之词向量转换
  • 2026年质量好的压电陶瓷环/压电陶瓷片厂家实力参考
  • 2026年评价高的铝塑共挤新材/铝塑共挤幕墙用户口碑认可厂家
  • 2026年靠谱的铝塑共挤保温型材/铝塑共挤密封型材用户口碑认可参考(高评价)
  • 临沂干洗怎么选?2026年实力门店综合评估报告
  • 常见问题解决 --- VMware Workstation 未能启动 VMware Authorization Service
  • 滁州报废车处理全攻略:2026快速注销与高价回收服务商选择指南
  • 海口排烟工程哪家强?2026年五家实力公司盘点
  • 常见问题解决 --- 您无权输入许可证密钥,请使用系统管理员账户重试
  • Claude Code 使用技巧 —— LSP Token消耗直接降40%
  • 滁州报废车回收服务商选购指南:流程、报价与合规解析
  • 2026年靠谱的透水砖生产商综合评估与精选推荐
  • 2026年江苏金属锥体与封头制造服务商综合实力分析
  • 宜兴金属锥体诚信供应商评测:宏明机械领跑行业
  • 2026年宜昌购车攻略:五家实力派二手车服务公司解析
  • 2026年开年,宜昌新能源二手车选购的三大实力服务商解析
  • 影响移动固态磁盘读写速率的因素有哪些呢?
  • 2026年第一季度江苏潍柴系柴油发电机行业竞争格局深度解析
  • 最优化方法(统筹学)及其MATLAB实现-chapter1