以编程方式篡改Mac OSX MenuBar设置

时间:2010-06-30 21:50:41

标签: macos scripting applescript

我有一个程序需要在菜单栏中打开和关闭系统时钟。 这样就可以了:

defaults write com.apple.MenuBarClock ClockEnabled -bool false

(使用false - > true将其重新打开。

除非在我手动打开日期和时间之前它才真正生效。时间设置(只是打开设置会导致菜单栏刷新,时钟根据先前发出的“默认写入”命令显示或消失。)

问题:

是否有刷新菜单栏显示的命令? 或者以编程方式打开日期和时间时间系统偏好?

PS:感谢第一个回答指出“killall SystemUIServer”,但除了我遇到的奇怪问题之外,它似乎太慢了。整个菜单栏刷新,需要一整秒。我真的只想打开和关闭时钟,就像在日期和时间偏好设置中手动点击“在菜单栏中显示日期和时间”时所发生的那样。

3 个答案:

答案 0 :(得分:5)

尝试一下:

defaults write com.apple.MenuBarClock ClockEnabled -bool false
killall SystemUIServer

使用killall SystemUIServer并不危险,因为该进程一旦被杀死就会重新启动。从我的简短测试中,这似乎重置菜单栏时钟以及其他系统菜单栏项目(WiFi,电池等)

答案 1 :(得分:4)

菜单栏中的时钟实际上是Menu Extra,其路径为:/System/Library/CoreServices/Menu Extras/Clock.menu

除了更改ClockEnabled的{​​{1}}键之外,您还必须修改com.apple.MenuBarClock的{​​{1}}键来修改菜单附加列表。

例如,以下命令将添加额外的时钟菜单:

menuExtras

棘手的部分是再次删除时钟菜单,因为默认设置没有com.apple.systemuiserver选项,您必须使用defaults write com.apple.systemuiserver menuExtras -array-add "/System/Library/CoreServices/Menu Extras/Clock.menu" 选项覆盖整个数组。

一旦进行了更改,就可以向SystemUIServer发送挂断信号:

-array-remove

要以编程方式打开“日期和时间”系统偏好设置面板,您可以使用以下AppleScript:

-array

答案 2 :(得分:0)

要删除 /System/Library/CoreServices/Menu Extras/ 中的条目,可以通过捕获所有条目减去您不想要的条目并将其重写为“defaults write com.apple.systemuiserver menuExtras/”来实现

sysUI=$(defaults read com.apple.systemuiserver menuExtras)
newSysUI=$(echo "$sysUI"|grep -v 'Clock.menu')
defaults write com.apple.systemuiserver menuExtras "$newSysUI"
killall SystemUIServer