升级至macOS Monterey后切换键盘布局的AppleScript脚本失效求助
修复Monterey下失效的AppleScript键盘布局切换脚本
我升级到Monterey时也遇到过一模一样的问题!Apple在这个版本里调整了菜单栏代理的权限机制和UI交互逻辑,原来依赖点击TextInputMenuAgent菜单的方式变得不稳定——哪怕能定位到菜单选项,也可能因为系统权限或菜单加载时序问题导致点击失效。
方案1:直接通过系统API设置(推荐)
这种方法完全避开了UI模拟的坑,直接调用系统底层接口设置键盘布局,稳定性和可靠性都高很多:
changeKeyboardLayout("Squirrel") on changeKeyboardLayout(layoutName) tell application "System Events" set current keyboard layout to layoutName end tell end changeKeyboardLayout
只要你的layoutName和系统里显示的键盘布局名称完全一致(注意大小写和空格),这个脚本就能直接生效,不需要纠结菜单层级或点击时序。
方案2:修复模拟点击的逻辑(适合特殊场景)
如果因为某些原因必须用模拟点击的方式,可以调整代码,增加菜单展开的延迟,并确保权限到位:
changeKeyboardLayout("Squirrel") on changeKeyboardLayout(layoutName) tell application "System Events" tell process "TextInputMenuAgent" set inputMenuBarItem to menu bar item 1 of menu bar 2 -- 先点击展开菜单,给系统一点响应时间 click inputMenuBarItem delay 0.1 -- 再点击目标布局选项 click menu item layoutName of menu 1 of inputMenuBarItem end tell end tell end changeKeyboardLayout
另外一定要检查权限:打开「系统设置」→「隐私与安全性」→「辅助功能」,把你用来运行脚本的应用(比如Script Debugger、Script Editor)添加进去,否则系统会阻止脚本模拟点击操作。
你提到用索引定位到"U.S."但点击没反应,本质是因为Monterey里菜单展开的速度变慢了,脚本执行点击时菜单还没完全加载完成,加上delay 0.1就能解决这个时序问题。
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

