🪟 Windows 弹窗监控钩子(popup_hook)

SozoPC 常驻「窗口弹出」监控:任何窗口弹出现在瞬间即被记录(进程名/标题/尺寸/毫秒时间戳)——用于抓 cmd 闪窗、流氓弹窗、后台任务弹窗。

组件

  • 脚本D:\hermes\scripts\popup_hook.py(SetWinEventHook 事件钩子)
  • 计划任务PopupHookWatcher(AtLogOn 触发 → pythonw 无窗口运行,接管手动 python 后台进程)
  • 日志D:\hermes\hsdesign_work\cache\popups\popup_hook_YYYYMMDD.jsonl(按天分片,跨天自动换片;7 天自动清理;旧单文件归档为前一日期)

捕获能力(2026-08-24 上线)

事件记录内容
SHOW(窗口弹出瞬间)进程名 + 标题 + 尺寸/位置 + 毫秒时间戳
FOCUS(抢前台——哪怕不”新开”)同上(抓”把焦点抢走”的弹窗)
DESTROY(消失)同上;无标题窗口不记录(噪音过滤)

方案对比:枚举轮询漏 Toast/快闪(<2s 窗口);录视频抽帧全但体积大(10 分钟几百 MB + 需 ffmpeg);事件钩子 = 0 延迟 + 存储极小

资源占用(实测 2026-08-24)

  • CPU:累计 0.08s / 运行 45 分钟(≈零)
  • 内存:14.5 MB
  • 日志体积:约 100K/天量级(7 天自动清理)

排查 cmd 闪窗历史(2026-08-24)

  • 元凶:Hermes cron vault-git-backup5 7 * * *,vault 每日 git commit)——07:05:01 弹出 cmd 窗,持续约 45 秒(git.exe 子进程继承 console,调度器以管理员上下文运行)
  • 修复①(脚本级)D:\hermes\scripts\vault_git_backup.pysubprocess.runcreationflags=CREATE_NO_WINDOW (0x08000000)(仅 Windows)
  • 修复②(全局根治)sitecustomize.py 写入 3 个 Python 环境 → 所有 python 子进程默认 NO_WINDOW:
    • C:\Users\Sozo\AppData\Local\Programs\Python\Python313\Lib\site-packages\sitecustomize.py
    • D:\hermes\hermes-agent\venv\Lib\site-packages\sitecustomize.py
    • C:\Users\Sozo\AppData\Local\Programs\Python\Python311\Lib\site-packages\sitecustomize.py
    • 源:D:\hermes\scripts\sitecustomize.py;验证:Py313 OK / venv flags=patched

用途

  • 用户查「半夜 10 分钟只 1 个弹窗」→ 钩子 24h 常驻抓全(白天打字时高频)
  • 隔天查「今天弹了什么」:Get-Content D:\hermes\hsdesign_work\cache\popups\popup_hook_<YYYYMMDD>.jsonl