🪟 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-backup(5 7 * * *,vault 每日 git commit)——07:05:01 弹出 cmd 窗,持续约 45 秒(git.exe 子进程继承 console,调度器以管理员上下文运行) - 修复①(脚本级):
D:\hermes\scripts\vault_git_backup.py的subprocess.run加creationflags=CREATE_NO_WINDOW (0x08000000)(仅 Windows) - 修复②(全局根治):
sitecustomize.py写入 3 个 Python 环境 → 所有 python 子进程默认 NO_WINDOW:C:\Users\Sozo\AppData\Local\Programs\Python\Python313\Lib\site-packages\sitecustomize.pyD:\hermes\hermes-agent\venv\Lib\site-packages\sitecustomize.pyC:\Users\Sozo\AppData\Local\Programs\Python\Python311\Lib\site-packages\sitecustomize.py- 源:
D:\hermes\scripts\sitecustomize.py;验证:Py313 OK / venvflags=patched
用途
- 用户查「半夜 10 分钟只 1 个弹窗」→ 钩子 24h 常驻抓全(白天打字时高频)
- 隔天查「今天弹了什么」:
Get-Content D:\hermes\hsdesign_work\cache\popups\popup_hook_<YYYYMMDD>.jsonl