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外部依赖
| 类型 | 依赖 |
|---|---|
| cli | swift(运行 get_window_id.swift 或 -e 内联执行 CoreGraphics 枚举) |
| cli | screencapture(macOS 系统自带,窗口/区域截图) |
| cli | osascript / System Events(AppleScript 控制 app 窗口) |
| cli | sips / ls / file / timeout(可选缩放与校验、超时保护) |
4风险提醒 风险提醒:蓝色 · 知晓即可
- 截屏内容敏感:像素级副本可能含密码/私人文档 — screencapture 捕获的是真实屏幕像素;产物文件落本地且可能进入模型上下文。涉及敏感窗口时需宿主权限纪律与文件清理。
- AppleScript/System Events 是本地 UI 控制面 — osascript 可激活/操作任意 app,System Events 键盘模拟 fallback 可向 app 发送按键;这是宿主 shell 授权内的本地能力,恶意输入(app 名来自不可信源)需宿主命令注入防护。
- TCC 授权是硬前置且授权对象常是 helper 进程 — 无 Screen Recording 授权则枚举失败;授权显示名可能是 swift/Terminal 而非目标 app,用户可能误授权/找不到条目(脚本已提供 hint 缓解)。
- WID 会失效、UI 时序敏感 — app 重启/窗口重建后 CGWindowID 失效需重取;osascript 可能挂死(须 timeout);UI 动画未完成时截图会错位(须 sleep)。属可靠性注意项。
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…d5c4678cb5