applescript 无法直接控制窗口大小位置,但可通过system events模拟快捷键(如⌃⌥⌘→缩放至右半屏)或设置bounds属性实现,需启用辅助功能权限;兼容性差时推荐用rectangle等第三方工具。
applescript 本身不能直接控制窗口大小或位置(macos 系统限制),但可通过辅助功能 api + system events 模拟操作,或调用更可靠的底层工具如 swift、python + pyobjc,不过若坚持用 applescript,最实用的方式是结合 osascript 调用系统命令 + applescript 控制「聚焦窗口」+「快捷键触发缩放」。
使用标准快捷键触发窗口缩放
macOS 原生支持「缩放窗口至屏幕一半」的快捷键:
• ⌃⌥⌘←(左半屏)
• ⌃⌥⌘→(右半屏)
• ⌃⌥⌘↑(全屏)
• ⌃⌥⌘↓(还原)
这些快捷键由系统级窗口管理器响应,AppleScript 可模拟触发。
- 确保「辅助功能 → 键盘 → 启用快捷键」已开启(系统设置 > 辅助功能 > 键盘 >「启用快捷键」勾选)
- 脚本示例:将当前前台窗口缩放到右侧
key code 124 using {control down, option down, command down} -- ⌃⌥⌘→
end tell
精准控制窗口尺寸与位置(需启用辅助功能权限)
通过 System Events 读写窗口属性,适用于支持 AppleScript 的应用(如 Finder、TextEdit、Safari 等),但部分应用(Chrome、VS Code)因沙盒限制可能失败。
- 先获取前台应用和窗口
- 设置其
bounds属性({x, y, width, height},坐标系原点在左上角) - 示例:将当前窗口设为 800×600,位于屏幕中央(假设主屏分辨率 1920×1080)
set frontApp to first application process whose frontmost is true
set frontWindow to first window of frontApp
set position of frontWindow to {560, 240}
set size of frontWindow to {800, 600}
end tell
处理多显示器与分辨率适配
不同屏幕尺寸和缩放比例下,硬编码坐标易失效。建议动态获取主屏/活跃屏信息:
- 用
do shell script "system_profiler SPDisplaysDataType | grep -A 2 Resolution"获取分辨率(不推荐,解析不稳定) - 更稳妥方式:用 AppleScript 获取
desktop size(仅返回主屏像素尺寸) - 实际中建议固定相对比例,例如:宽度设为屏幕宽的 60%,高度为 70%
set {screenW, screenH} to desktop size
set w to round (screenW * 0.6)
set h to round (screenH * 0.7)
set x to round ((screenW - w) / 2)
set y to round ((screenH - h) / 3)
set bounds of first window of (first application process whose frontmost is true) to {x, y, x + w, y + h}
end tell
绕过权限与兼容性问题的替代方案
若遇到「拒绝访问」或窗口不可控,说明该应用未暴露 AppleScript 接口,此时应:
- 改用第三方工具如 Rectangle(免费开源,支持快捷键+AppleScript Bridge)
- 用 Rectangle 提供的 AppleScript 命令,如
tell application "Rectangle" to run action "leftHalf" - 或执行 shell 命令:
osascript -e 'tell app "Rectangle" to run action "rightHalf"'
Rectangle 无需逐个授予权限,且适配几乎所有应用,实测稳定可靠。











