# AX API 备忘录 ## 基本使用方法 - `AXUIElementCreateApplication(pid)` → 获取应用 AX 元素 - `kAXWindowsAttribute` → 获取窗口列表 - `kAXPositionAttribute` / `kAXSizeAttribute` → 读写窗口位置 - `AXIsProcessTrusted()` → 权限检测 ## 分层架构 ``` WindowOperator (protocol) ├── AXOperator: 真实 AX API 实现 └── MockOperator: 测试用,无需 AXUIElement WindowService (high-level batch ops) └── consumes WindowOperator ``` ## 已知边缘情况 | 场景 | 处理方式 | |------|----------| | AX API 返回 nil | compactMap 过滤 | | 权限未授权 | PermissionGate.assertAuthorized() | | setRect 失败 | 收集到 MoveReport,显示 ErrorBanner | | 窗口被关闭 | window(withId:) 返回 nil → 跳过 | | 跨 Space 窗口 | 已按 spaceId 分组,按 Space 执行 |