我正在尝试制作一个可以自动重排空间的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
有没有办法看到窗口的组件是什么,所以我知道我是否需要进入表格或其他东西,然后才能访问切换设置的复选框
答案 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 代码使用0
或1
有条件地点击目标复选框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 代码就是这样,并且不使用任何其他错误处理然后显示的内容,仅表示完成任务的多种方式之一。用户有责任根据需要添加/使用适当的错误处理。