capture-screen
Programmatic screenshot capture on macOS. Find window IDs with Swift CGWindowListCopyWindowInfo, control application windows via AppleScript (zoom, scroll, select), and capture with screencapture. Use when automating screenshots, capturing application windows for documentation, or building multi-shot visual workflows.
1实现原理 · 为什么它能做到
三步工作流全部落在 macOS 原生工具上:Swift+CoreGraphics 列窗口拿 WID → AppleScript/osascript 控制视图 → screencapture -l <WID> 精确截图。
1. Find Window → Swift CGWindowListCopyWindowInfo → get numeric Window ID 2. Control View → AppleScript (osascript) → zoom, scroll, select 3. Capture → screencapture -l <WID> → PNG/JPEG output
找窗口用 Swift 脚本 get_window_id.swift 调 CoreGraphics CGWindowListCopyWindowInfo(.optionOnScreenOnly),按 app 名/标题关键词过滤输出 WID=… | App=… | Title=…。
CGWindowListCopyWindowInfo( .optionOnScreenOnly, kCGNullWindowID ) as? [[String: Any]] else {
控制视图层:Excel 有完整 AppleScript 字典支持(激活、缩放 zoom、滚动行/列、选 range、切 sheet、开文件),任意 app 走基础 activate / System Events AXRaise,受限 app 退回键盘模拟。
osascript -e 'tell application "Microsoft Excel" set scroll row of active window to 45 end tell'
截图层:screencapture -l <WID> 精确捕获指定窗口(-x 静音、-t jpg、-T 延迟、-R 区域),Retina 2x 输出用 sips 缩回 1x。
# Silent capture (no camera shutter sound) screencapture -x -l <WID> output.png
权限三连排查模板:Screen Recording 是必须授权;helper binary(swift/python/terminal)与打包 .app 的 TCC 授权身份不同,脚本提供 --permission-hint screen/microphone 打印排查指引。
`swift scripts/get_window_id.swift` reads on-screen windows via CoreGraphics, so it needs Screen Recording permission on macOS.
文档化失败路线(DO NOT USE):System Events id of window(-1728)、Python PyObjC Quartz(ModuleNotFoundError)、osascript window id(格式不对)——防止执行模型重复踩坑。
| `System Events` → `id of window` | Error -1728 | System Events cannot access window IDs in the format screencapture needs |
2核心能力
3外部依赖
| Kind | Dependency / Endpoint |
|---|---|
| cli | swift(运行 get_window_id.swift 或 -e 内联执行 CoreGraphics 枚举) |
| cli | screencapture(macOS 系统自带,窗口/区域截图) |
| cli | osascript / System Events(AppleScript 控制 app 窗口) |
| cli | sips / ls / file / timeout(可选缩放与校验、超时保护) |
4管控建议与判定依据
- scripts/: 执行本地脚本或命令: swift scripts/get_window_id.swift(或 swift -e 内联枚举窗口)
- 本地工作目录: 文件读写与工件输出: 截图输出文件(output.png/output.jpg 等,由调用者指定路径)
5第二遍独立确认
- [ok] Swift 脚本只做窗口枚举(无隐藏行为) — get_window_id.swift 逻辑 = 参数解析 + CGWindowListCopyWindowInfo(.optionOnScreenOnly) + 过滤打印 + 权限提示文本;无文件写/网络/进程执行调用。
- [ok] 三步工作流与 description 声明一致 — Find Window/Control View/Capture 三步概览代码块、Step1-3 正文、Quick Start 命令逐字对应;Excel 控制命令含 zoom/scroll/select/sheet。
- [ok] screencapture -l 兼容 CGWindowID 的说法有失败表佐证 — Failed Approaches 表记录 System Events id of window 报 -1728 等三个失败路径,反向支持『Swift 枚举 + screencapture -l』为主路径。
- [ok] 无网络/无凭证(安全结论基础) — 全目录 token 扫描零网络/凭证命中;依赖全部是 macOS 系统自带 CLI。
- [ok] TCC/Screen Recording 依赖表述准确 — SKILL.md Permission Troubleshooting 与脚本 --permission-hint 均明示 Screen Recording 为前置条件,并处理 helper binary 身份问题。
- [ok] 元数据(commit/license/stars) — 本地 HEAD == pin d5c4678cb5d4fd6acc9c922690df035dbd33d247;GitHub API:MIT、stars 1385(2026-09-09 实采)、pushed_at 2026-09-09T12:33:29Z。
6结论
fb587255b81bdc81…