弹窗哨兵-监控「抖音直播伴侣」等软件窗口动态

监控「抖音直播伴侣」等软件是否弹出了新窗口(例如要求主播出镜、实名验证、违规警告等弹窗)。 一旦检测到,立刻置顶红色闪烁警报 + 循环响铃提醒你,避免挂播时错过; 还可选择把报警推送到手机 / 群机器人,人不在电脑前也能第一时间知道。

支持两种检测方式,可同时开启:

  1. 窗口文字检测(推荐):监控目标进程新窗口,读取标题和弹窗内文字,命中「出镜/实名/违规…」就报警,不用上传截图
  2. 图片检测(选填/高级):上传弹窗截图,屏幕上出现相似画面就报警(需要 pip install -r requirements.txt)

下载

使用方法

产品包(推荐,给最终用户)

  1. 下载并解压 popup-sentry-v1.0.0.zip(或本地 release/弹窗哨兵.zip),双击 弹窗哨兵.exe
  2. 首次打开会弹出「三步上手」;也可随时点「使用说明」
  3. 确认「监控哪个软件」里有 直播伴侣;默认已是「弹窗文字含关键词才报警」
  4. (可选)选报警声卡 / 配置推送;图片检测一般不用
  5. 点「开始监控」,然后正常开播

重新打包:在项目根目录执行 python build_product.py

源码运行(开发)

  1. 双击 启动.vbs(无任何黑窗口;也可运行 python app.py)
  2. 按软件内「使用说明」三步操作即可
  3. 检测到弹窗 → 电脑响铃 + 红色警报窗(+ 手机 / 群推送)

建议先点一次「测试报警」听听警报效果;换过声卡后也建议再测一次。

文字检测(默认,不用截图)

默认模式:仅当弹窗文字含关键词才报警。会读取窗口标题和弹窗内部可见文字, 命中「出镜、实名、验证、警告、违规、提醒」等词就响铃。关键词可在界面修改。

若弹窗刚弹出时文字还没渲染完,引擎会在轮询里自动再判一次,减少漏报。 若个别软件完全读不到内部文字,再改用下面的图片检测。

报警声卡怎么选

直播机常挂多张声卡 / 虚拟声卡,系统默认设备不一定是你想听到报警的那张。 在「报警声卡」下拉里选目标播放设备,点「测试报警」确认;插拔声卡后可点「刷新」重新枚举。 选择会写入 config.json,按设备名记忆;设备不在线时自动回退「系统默认」。

图片检测怎么用效果最好(选填)

一般用上面的文字关键词即可。只有读不到弹窗文字时才需要:

  • 用 Win+Shift+S(或微信/QQ 截图)把目标弹窗截下来,保存为 PNG
  • 只截弹窗本身,不要带周围背景;弹窗里有独特文字/图标的区域最好
  • 可以添加多张截图,任何一张出现在屏幕上都会报警
  • 误报 → 把「匹配灵敏度」调高(如 90);漏报 → 调低(如 75)
  • 添加的截图会复制到 templates/ 文件夹,删原图不影响

工作原理

  • 窗口检测(双通道,类似安全软件的广告拦截):
    • 即时通道:向系统注册 SetWinEventHook 窗口显示钩子,任何窗口一出现系统立刻回调,毫秒级报警,不用等扫描
    • 轮询通道:每秒全量扫描,负责按关键词锁定目标进程(把它已有的窗口记为基线)、检测进程退出(崩溃报警,可关)、兜住钩子漏掉的窗口,并对「文字稍后才出现」的窗口做二次判定
    • 新窗口 = 基线之外的窗口,包括无标题弹窗;自动过滤输入法、菜单、tooltip、Alt+Tab 任务切换、音量条等系统界面噪音;explorer 等系统外壳进程即使窗口标题带关键词也永不会被锁定为监控目标
    • 文字模式会抽取子控件文字,并尽力用 UI Automation 读可见 Name
    • 日志里带 [即时] 的是钩子通道抓到的,带 [轮询] / [文字补检] 的是扫描兜底抓到的
  • 图片检测:每秒截取全屏(含多显示器),用 OpenCV 模板匹配比对你的截图,相似度超过阈值报警;同一画面持续存在只报一次,消失后自动恢复监视;内置 3 档缩放容忍 DPI 差异

两种报警模式

模式说明
仅弹窗文字含关键词才报警(默认)推荐。读标题和弹窗内文字,命中「出镜、实名…」才响,不用截图
任何新弹窗都报警最灵敏。正常面板也可能响,可用学习模式降噪

正常面板也报警太吵?用白名单

「任何新弹窗都报警」模式下,你自己点开美颜、素材库这些正常面板也会报警。两个办法把它们静音:

  1. 学习模式(推荐,一次搞定):点「开始监控」→ 点「🎓 学习模式」→ 把直播伴侣的常用面板挨个点开一遍 → 点「结束学习」。这期间出现的窗口全部记为正常,以后不报警
  2. 报警时顺手拉黑:误报的红色警报窗上点「误报?以后忽略这类窗口」即可

白名单按窗口"长相"(类名+标题+大小)识别,持久保存在配置里,条数显示在主界面,可一键清空。 注意:学习模式期间不要让真正要监控的弹窗出现,否则它也会被记为正常(记错了就清空白名单重学)。

推送通知到手机 / 群机器人(可选)

人不在电脑前时,本地响铃就听不到了。在「推送通知」区勾选「启用推送」,选好渠道并填入地址 / Key, 报警时就会同步推给你的手机或群。零额外依赖(纯标准库发 HTTP),推送在后台线程进行,不卡界面; 成功 / 失败都会写进事件日志。填好后先点「测试推送」验证一次。

支持的渠道与「地址 / Key」怎么填:

渠道「地址 / Key」填什么
自定义 Webhook完整 URL;会 POST JSON:{"title","content","time"}
Bark(iOS)Bark 地址,形如 https://api.day.app/你的Key
Server酱·Turbo(方糖)SendKey,形如 SCTxxxxxxxxxxxx
企业微信群机器人机器人 Webhook 完整 URL(含 key=)
钉钉群机器人机器人 Webhook 完整 URL(含 access_token=);若开了「加签」,把密钥填到右侧「密钥」框
Telegram Bot <bot_token>/<chat_id>,如 123456:AAE.../-1001234567890

小贴士:

  • 钉钉/企业微信机器人如果用「自定义关键词」安全设置,请确保关键词能出现在消息里(默认消息含「弹窗」二字)
  • 只在「检测到弹窗」和「目标进程退出」时推送;5 秒内完全相同的消息只推一次,避免刷屏
  • 想接入上表以外的服务,选「自定义 Webhook」把 JSON 转发到你自己的中转即可

文件说明

  • app.py — 图形界面主程序
  • audio_alarm.py — Windows 播放设备枚举与指定声卡响铃
  • window_text.py — 窗口内部文字抽取(子控件 + UI Automation)
  • watcher.py — 窗口监控引擎(可独立命令行运行:python watcher.py 直播伴侣)
  • image_watcher.py — 图片检测引擎(OpenCV 模板匹配)
  • notifier.py — 推送引擎(Webhook / Bark / Server酱 / 企业微信 / 钉钉 / Telegram,纯标准库)
  • templates/ — 你添加的弹窗截图存放处
  • config.json — 设置会自动保存到这里
  • 启动.vbs — 双击启动(不弹任何命令行窗口)
  • run_smoke_test.py / test_image_detection.py / test_notifier.py — 自动化冒烟测试

常见问题

监控状态一直是"等待目标进程启动"? 说明还没找到直播伴侣。打开直播伴侣后会自动锁定;也可能关键词不匹配—— 可以运行 python watcher.py 直播伴侣 看命令行输出,或把关键词换成直播伴侣的进程名。

误报太多? 切到「仅弹窗文字含关键词才报警」,或把日志里频繁出现的窗口用学习模式 / 白名单忽略。

全部回复 (0)

沙发虚位以待~

还没有任何回复,快来说点什么抢沙发吧!

发表回复抢沙发

登录 后参与讨论