Macos Applescript系统首选项自动化

Macos Applescript系统首选项自动化,macos,automation,applescript,system,ui-automation,Macos,Automation,Applescript,System,Ui Automation,我正在研究自动设置系统首选项,但我有一个问题。此代码应选择Wi-Fi选项卡,但滚动区域1不存在,除非我手动单击属于滚动区域的任何元素。我尝试用许多外部程序模拟点击,但即使这样,我也无法访问滚动区域 tell application "System Preferences" activate reveal pane id "com.apple.preference.dock" end tell tell application "S

我正在研究自动设置系统首选项,但我有一个问题。此代码应选择Wi-Fi选项卡,但滚动区域1不存在,除非我手动单击属于滚动区域的任何元素。我尝试用许多外部程序模拟点击,但即使这样,我也无法访问滚动区域

tell application "System Preferences"
    activate
    reveal pane id "com.apple.preference.dock"
end tell
tell application "System Events" to tell application process "System Preferences"
    delay 1

    tell scroll area 1 of window 1
        select row 3 of outline 1
    end tell
end tell
是否有其他方法更改停靠和菜单栏设置或仅访问滚动区域项目

编辑:最终目标是从菜单栏中隐藏Wi-Fi图标

最终目标是从菜单栏中隐藏Wi-Fi图标

macOS Big-Sur中系统首选项的UI脚本已经成为一场噩梦,因为在以前版本的macOS中使用的许多方法在macOS Big-Sur中已不再适用。当使用Xcode的可访问性检查器时,许多UI元素报告父元素不将元素报告为其子元素之一,这使得无法与它们通信。或者有些代码可能一次工作,下一次就不行了。我写了一些打开Wi-Fi的代码,并单击了“在菜单栏中显示”复选框。它工作了几次,但现在没有

我写的原代码,它是零星工作的,我不会发布,但是,下面的例子Apple Script代码在MaOS大瑟尔11.4下一直在测试,尽管它是我认为的KLUDY UI脚本,因为它在屏幕上是可见的,很容易由于时序问题而失败。或者,如果层次化UI元素结构因macOS更新/升级而改变

下面显示的示例AppleScript代码在macOS Big Sur 11.4下的脚本编辑器中进行了测试,系统首选项中的语言和区域设置设置设置为English US-Primary,在没有问题1的情况下为我工作

1假设系统首选项>安全和隐私>隐私中的必要和适当设置已根据需要设置/解决。 此脚本要求在“系统首选项”>“键盘”>“快捷键”选项卡上选中“使用键盘导航在控件之间移动焦点”复选框,并且按照编码,脚本将检查其状态,并根据其当前状态根据需要切换复选框

此脚本还首先检查Wi-Fi图标是否显示在菜单栏上,如果未显示,则停止执行脚本,因为其目的是仅在菜单栏上显示时才执行

AppleScript代码示例: -获取目标.plist文件的完全限定POSIX路径名。 将PropertyListFilePath设置为—— 的POSIX路径 以字符串形式从用户域指向首选项的路径& com.apple.controlcenter.plist -获取“NSStatusItem Visible WiFi”的值,以确定 -Wi-Fi图标显示在菜单栏上,如果未显示,则停止 -脚本的执行,因为它的目的是仅在脚本执行时才执行。 将应用程序系统事件告知 将PropertyList文件路径告知属性列表文件 将| Wi-Fi菜单栏图标状态|设置为¨的值 属性列表项—— NSStatusItem可视WiFi 如果| Wi-Fi菜单栏图标状态|为false,则返回 -检查系统首选项是否正确 -正在运行,如果是,则关闭它。 - -这样做是为了脚本不会失败 -如果它正在运行,并且模式表正在运行 -显示,因此使用“killall” -如果“退出”失败,那么“退出”将失败。 - -这样做也是为了允许默认行为 -从干净的事件中可以预测。 如果运行应用程序系统首选项,则 尝试 告诉应用程序系统首选项退出 论错误 是否执行shell脚本终止所有“系统首选项” 结束尝试 延迟0.1 如果结束 -请确保系统首选项未在之前运行 -再次打开它。否则可能会有问题 -当它实际关闭时尝试重新打开时。 运行应用程序系统首选项时重复此操作 延迟0.1 结束重复 -获取目标.plist文件的完全限定POSIX路径名。 将PropertyListFilePath设置为—— 的POSIX路径 以字符串形式从用户域指向首选项的路径& .GlobalPreferences.plist -获取AppleKeyboardUIMode的值以确定 -'使用键盘导航在控件之间移动焦点' -选中系统首选项上的复选框> -键盘>快捷键选项卡。 将应用程序系统事件告知 将PropertyList文件路径告知属性列表文件 将键盘导航设置为¨的值 属性列表项AppleKeyboardUIMode 如果keyboardNavigation=0,则 -选中复选框。 我的开关键盘导航 如果结束 -打开系统首选项至停靠和菜单栏窗格。 - -此UI脚本需要它可见,因此需要使用activate命令。 告诉应用程序系统首选项 使活动 显示窗格id com.apple.preference.dock 结束语 告诉应用程序系统事件 将i设置为0 重复此操作,直到存在窗口停靠和菜单栏 应用程序处理系统优先 法国 延迟0.1 将i设置为i+1 如果我≥ 30然后返回 结束重复 结束语 -选项卡,然后取消选中“在菜单栏中显示”复选框。 告诉应用程序系统事件 键代码48-制表键 延迟0.2 键代码125-向下箭头键 延迟0.2 键代码48-制表键 延迟0.2 键代码49-空格键 延迟0.1 结束语 如果keyboardNavigation=0,则 -如果需要,请取消选中复选框 -以前未检查。 我的开关键盘导航 如果结束 延迟0.2 告诉应用程序系统首选项退出 -处理者 -切换复选框:“使用键盘导航” -在控件之间移动焦点的步骤 关于切换键盘导航 告诉应用程序系统首选项 使活动 露锚短刺 窗格id com.apple.preference.keyboard 结束语 告诉应用程序系统事件 告诉前窗—— 应用程序进程系统首选项 将i设置为0 重复此操作,直到选项卡组1的复选框1存在 延迟0.1 将i设置为i+1 如果我≥ 30然后返回 结束重复 单击选项卡组1的复选框1 结束语 结束语 结束切换键盘导航 注:

如果未选中“使用键盘导航在控件之间移动焦点”复选框的正常状态,则不要立即背靠背运行脚本,因为用户全局首选项文件中属性列表项AppleKeyboardUIMode的值需要一两秒钟才能更新更改。我提到这一点主要是为了测试,而不是在正常的生产使用中,因为这不应该是一个问题

注意:示例AppleScript代码只是,任何包含的错误处理都不包含任何其他适当的错误处理。用户有责任根据需要添加任何适当的错误处理。请查看中的语句和语句。另见。此外,在适当的情况下,可能需要在事件之间使用命令,例如延迟0.5,延迟值设置适当