1仕組みと動作原理
macOSネイティブツールのみで完結する3ステップのワークフロー: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)を呼び出し、アプリ名/タイトルキーワードでフィルタリングして WID=… | App=… | Title=… を出力。
CGWindowListCopyWindowInfo( .optionOnScreenOnly, kCGNullWindowID ) as? [[String: Any]] else {
ビュー制御層:Excelは完全なAppleScriptディクショナリに対応(アクティブ化、ズーム zoom、行/列のスクロール、範囲 range の選択、シート切り替え、ファイルオープン)。任意のアプリは基本的な activate / System Events AXRaise を利用し、制限のあるアプリはキーボードシミュレーションにフォールバック。
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
権限トラブルシューティングの3ステップテンプレート:Screen Recording権限は必須。ヘルパーバイナリ(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…