发布于2026-08-17 阅读(0)
扫一扫,手机访问
Topit可直观设置窗口层级,Hammerspoon支持按程序名自动分级,AppleScript手动修改NSWindowLevel值仅限高级调试。

你需要让终端窗口永远浮在浏览器上方,同时让笔记软件保持在所有窗口底层——Mac原生不支持按程序设置不同层级,但通过Topit或Hammerspoon可精确控制每个应用的Z轴位置。
这是最直观、无需编码的方法,适合95%的日常使用场景。Topit界面直接列出所有运行中的窗口,选中即置顶,操作零学习成本。
启动Topit应用,确保它已获得辅助功能与屏幕录制权限(【未授权将无法控制任何窗口】)。
在主界面左侧窗口列表中,找到你想要提升层级的程序,例如“Terminal”或“VS Code”。
点击右侧对应窗口卡片上的“立即置顶”按钮,该窗口会立刻带上蓝色边框并固定在最前层。
重复操作,为另一个程序(如“Notes”)点击“置底”按钮(部分版本显示为“取消置顶”),它就会自动沉到所有普通窗口之下——Topit通过动态调整NSWindowLevel值实现此效果,无需手动计算数值。
当你需要规则化管理(比如每次打开Chrome就让它浮在Finder之上,但低于终端),Hammerspoon是唯一稳定可靠的方案。
方法一:基础窗口层级绑定
打开Hammerspoon配置文件init.lua,粘贴以下代码:
hs.hotkey.bind({"cmd", "alt"}, "T", function()
local win = hs.window.focusedWindow()
如果当前有处于聚焦状态的窗口,就把它设置为悬浮层级,也就是始终置顶
if win then win:setLevel(hs.window.level.floating) end
end)
这段脚本的作用是:按下Cmd+Alt+T时,将当前聚焦窗口设为浮动层级(NSFloatingWindowLevel),比普通窗口高,但低于菜单栏和Dock。
方法二:按进程名自动分级
在init.lua中追加:
hs.application.watcher.new(function(name, type, app)
if name == "Terminal" then
for _, w in ipairs(app:allWindows()) do w:setLevel(hs.window.level.desktop) end
elseif name == "Safari" then
for _, w in ipairs(app:allWindows()) do w:setLevel(hs.window.level.floating) end
end
end):start()
这会让Terminal窗口一启动就获得最高层级(NSDesktopWindowLevel),而Safari始终处于浮动层。注意:此逻辑在应用启动时触发,已打开的窗口需重启才生效。
保存配置后,在Hammerspoon菜单栏图标上右键 → Reload Config,立即启用新规则。
仅建议用于验证层级行为或开发调试,日常使用极易导致窗口失控,且每次重启应用后失效。
第一步:获取目标窗口ID
在终端中执行:osascript -e 'id of first application process whose frontmost is true',得到类似com.apple.Terminal的Bundle ID。
第二步:用AppleScript强制设级
执行:osascript -e 'tell application "Terminal" to set level of first window to 24',其中24对应NSDesktopWindowLevel。
⚠️ 注意:这里的数值必须和系统预定义常量一一对应,比如20=NSNormalWindowLevel,21=NSFloatingWindowLevel,24=NSDesktopWindowLevel。只要填错,窗口就可能直接消失,甚至卡死,【而且无法撤销,只能强制退出该应用】。
第三步:验证结果
切换到其他应用,观察目标窗口是否仍可见。若不可见,说明层级值过低;若遮挡了菜单栏或Dock,说明值过高。
上一篇:mac触控板三指拖移怎么开启
下一篇:Mac怎么关闭键盘亮度自动调节
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
4
5
6
7
8
9