上一篇发了 LayoutKeeper 之后,有朋友问:恢复窗口位置的工具有好几个,为什么偏偏「连桌面一起恢复」这么难?这篇写写我做这个功能时踩的过程,纯开发日志向。 先说结论:难的不是「移动窗口」,是「知道窗口在哪个桌面」和「让系统允许你把它送回去」。 **第一坑:其他桌面的窗口,系统默认不给你看。** 辅助功能 API ( AX )只能拿到当前桌面的窗口列表。想枚举外接屏上其他桌面的窗口,得拿公开的窗口列表先算出候选,再用远程元素令牌把窗口找回来,而且要校验进程和窗口编号对得上——校验不过的不动,宁可漏恢复,也不能移错别人的窗口。 **第二坑:跨桌面的老接口早就被系统拦了。** 以前把窗口挪到另一个 Space 的老办法,从 macOS 14.5 起就被系统拦截,硬调也没用。真正可用的新接口是 macOS 26 才出现的 SkyLight 桥接操作。所以这也是为什么 LayoutKeeper 的跨桌面恢复要求 macOS 26+:不是我不想兼容旧系统,是旧系统上这条路根本不存在。同一桌面内的位置/大小恢复,macOS 14+ 就能用,不受影响。 **第三坑:调了接口不等于窗口...