使用AppleScript修改设置/系统首选项

时间:2018-03-10 21:49:35

标签: applescript

我正在尝试制作一个可以自动重排空间的AppleScript。我可以让AppleScript打开系统首选项并进入任务控制设置,但是我不知道如何选中我想要更改的框。

    tell application "System Preferences"
    activate
end tell

tell application "System Events"
    tell process "System Preferences"
        click menu item "Mission Control" of menu "View" of menu bar 1
    delay 2
    tell window "Mission Control"
            //additional code goes here
    end tell
    end tell
end tell

有没有办法看到窗口的组件是什么,所以我知道我是否需要进入表格或其他东西,然后才能访问切换设置的复选框

3 个答案:

答案 0 :(得分:1)

这是通过AppleScript使用 shell命令的替代方法,其优点是不需要系统首选项打开/运行/可见。它也快得多。

如果您确实打开它以监控下面的脚本是否有效,请记住,在关闭系统偏好设置之前,GUI(您看到的内容)不会更新,并打开它又来了。

要将根据最近的使用情况自动重新排列空格设置为true(即勾选复选框):

do shell script "defaults write com.apple.dock 'mru-spaces' -bool true; killall Dock"

要将其设置为false,即取消勾选该复选框,请在上面的代码行中将true更改为false

要切换设置,这个简短的脚本将实现:

    set currentSetting to ¬
        (do shell script ¬
            "defaults read com.apple.dock 'mru-spaces'") ¬
            as integer as boolean

    do shell script ¬
        "defaults write com.apple.dock 'mru-spaces' -bool " & ¬
        (not currentSetting) & ¬
        "; killall Dock"

注意:使用MacOS High Sierra进行测试,但在OS X Mavericks及其后的版本中应该可以使用(我相信)。

其他设置

切换到应用程序时,切换到打开应用程序窗口的空间

do shell script "defaults write -g AppleSpacesSwitchOnActivate -bool true"

(或false如果你想关闭该选项。)

按应用分组窗口

do shell script "defaults write com.apple.dock 'expose-group-apps' -bool true; killall Dock"

(或false如果你想关闭该选项。)

答案 1 :(得分:0)

这应该是你想要的。

在此示例中,Automatically rearrange Spaces based on most recent use是您要检查的复选框。

tell application "System Preferences"
    activate
    delay 2
    set the current pane to pane id "com.apple.preference.expose"
    delay 2
    tell application "System Events"
        click checkbox "Automatically rearrange Spaces based on most recent use" of group 2 of window "Mission Control" of application process "System Preferences"
    end tell
    quit
end tell

如果你想检查它,如果它没有被检查,那就是这个:

tell application "System Preferences"
    activate
    delay 2
    set the current pane to pane id "com.apple.preference.expose"
    delay 2
    tell application "System Events"
        tell checkbox "Automatically rearrange Spaces based on most recent use" of group 2 of window "Mission Control" of application process "System Preferences"
            if (get its value) = 0 then click it
        end tell
    end tell
    quit
end tell

如果你想在窗口中列出所有的UIElements:

set myArray to {}
tell application "System Preferences"
    activate
    delay 2
    set the current pane to pane id "com.apple.preference.expose"
    delay 2
    tell application "System Events"
        tell window "Mission Control" of application process "System Preferences"
            repeat with uiElem in entire contents as list
                set myArray to myArray & ((class of uiElem as string) & " : " & name of uiElem as string)
            end repeat
        end tell
    end tell
end tell

答案 2 :(得分:0)

首先我要说的是,虽然在此之前的其他两个答案都有效,但由于以下原因,我不会使用其中任何一个答案。

shadowsheep提供的答案可行,但它不必要地暴露了系统偏好设置GUI,我相信除非你的系统真的很慢delay 命令的 超过50%,在这个用例中只需要一个。

CJK提供的答案有效,但它使用了killall Dock,这在视觉上分散了注意力,导致所有桌面上所有最小化的窗口都无法最小化,导致进一步的视觉干扰,并使桌面变得杂乱,这可能需要用户清理乱七八糟的东西。即使没有其他窗户打开它,它仍然更像是我所呈现的视觉分心。

现在每个用户都有不同的工作习惯,所以提到的原因可能对你没有任何影响。就个人而言,我在四​​个虚拟桌面之间工作,并且可以在桌面上的众多应用程序中打开几十个窗口,其中有许多(如果不是最有效的话)。使用killall Dock对我来说是我最想做的事情。

话虽如此,这里可以替代现有答案。

可以肯定地说,大多数用户都没有打开并保持打开系统偏好设置但是以下示例 AppleScript 代码检查它是否正在运行,如果是,则关闭它。这样就可以在不显示GUI的情况下打开它,这样就不必看到随着脚本的进展而改变GUI的视觉干扰。

示例 AppleScript 代码只是切换目标状态复选框:

if running of application "System Preferences" then
    quit application "System Preferences"
    delay 1
end if
tell application "System Preferences"
    reveal pane id "com.apple.preference.expose"
    delay 1
    tell application "System Events"
        tell group 2 of window 1 of application process "System Preferences"
            click checkbox "Automatically rearrange Spaces based on most recent use"
        end tell
    end tell
    quit
end tell

示例 AppleScript 代码使用01有条件地点击目标复选框if value is equal to 0 then click it。如果未选中0,则仅使用1进行点击,如果已选中,则if running of application "System Preferences" then quit application "System Preferences" delay 1 end if tell application "System Preferences" reveal pane id "com.apple.preference.expose" delay 1 tell application "System Events" tell group 2 of window 1 of application process "System Preferences" tell checkbox "Automatically rearrange Spaces based on most recent use" if value is equal to 0 then click it end tell end tell end tell quit end tell 仅点击它。

killall Dock

显示的示例 AppleScript 代码块工作速度快,无需看到系统偏好设置 GUI和唯一的视觉效果效果是系统偏好 Dock Tile 会发生一次反弹,甚至可能不会引人注意,尤其是与delay的视觉分心相比时。

请注意,可能需要针对您的系统和/或其他delay 命令调整delay 命令 可能需要也可能不需要。根据需要调整和/或添加/删除{{1}} 命令

注意: 示例 AppleScript 代码就是这样,并且不使用任何其他错误处理然后显示的内容,仅表示完成任务的多种方式之一。用户有责任根据需要添加/使用适当的错误处理