2010-06-30 67 views
4

我有一个程序需要打开和关闭菜单栏中的系统时钟。 这将做到这一点:以编程方式篡改Mac OSX MenuBar设置

defaults write com.apple.MenuBarClock ClockEnabled -bool false 

(与false - >true来打开它)。

除非手动打开,否则它实际上不会生效日期&时间设置(刚打开设置会导致菜单栏刷新,并且时钟根据先前发出的“默认写入”命令出现或消失)。

问题:

是否有命令刷新菜单栏的显示? 或以编程方式打开日期&时间系统首选项?

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

回答

5

试试这个:

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

使用killall SystemUIServer是没有危险的过程,就像一旦它被杀害重新启动。从我简短的测试,这似乎重新设置菜单栏时钟以及其它系统菜单栏项目(无线网络,电池等)

+0

奇怪的是,这是为ShowDay等其他设置,但不适用于我的ClockEnabled。 – dreeves 2010-07-01 01:42:55

4

在菜单栏的时钟实际上是一个额外的菜单,其路径是:/System/Library/CoreServices/Menu Extras/Clock.menu

除了更改ClockEnabled密钥com.apple.MenuBarClock您还必须修改menuExtras密钥com.apple.systemuiserver来修改菜单附加列表。

例如,下面的命令将添加时钟菜单附加:

defaults write com.apple.systemuiserver menuExtras -array-add "/System/Library/CoreServices/Menu Extras/Clock.menu" 

棘手的部分是消除时钟菜单中再次额外的,因为默认没有一个-array-remove选项,您必须覆盖整个阵列使用-array选项。

一旦变化已经使得它足以发送挂机信号SystemUIServer:

killall SystemUIServer -HUP 

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

tell application "System Preferences" 
    set current pane to pane id "com.apple.preference.datetime" 
end tell 
+0

但是,如果命令重复,它也会创建多个时钟。如上所述删除时钟也会将所有状态栏项目重置为默认值。 – paul 2011-09-04 23:01:03