2009-11-18 87 views
7

AppleScript速度太慢,所以我嘗試使用ScriptingBridge打開System Preferences.app並設置當前窗格,該窗格也太慢。有沒有更快的方法來做到這一點?正確以編程方式打開預製面板的最快方法?

+2

您是否注意到System Preferences.app無論如何被調用都打開速度很慢?因爲我注意到了。 – 2009-11-18 09:52:14

+0

鑑於你以前的問題和這一個,你可能想看看這個:http://0xced.blogspot.com/2008/02/upgrading-system-preference-pane.html – 0xced 2009-11-18 09:56:56

+0

偉大的文章0xced,謝謝! – 2009-11-18 22:31:52

回答

5

使用啓動服務或NSWorkspace打開預製版軟件包。這是open(1)命令的編程版本。

+1

確實:'[[NSWorkspace sharedWorkspace] openFile:@「/ Path/To/Foo.prefPane」];' – mxcl 2009-11-18 20:20:40

+0

我通常不喜歡這個,因爲你必須弄清楚你的第三方預裝版已經安裝在哪裏。唉,使用捆綁標識符與適當的NSWorkspace調用似乎不起作用。 – mxcl 2009-11-18 20:21:33

+1

只有兩個地方可以,你可以使用'NSSearchPathForDirectoriesInDomains'來查看它們。 – 2009-11-18 20:31:39

5

沒有道理的:

system("open -a System\\ Preferences"); 

,並選擇打開該窗格:

open /System/Library/PreferencePanes/Internet.prefPane 
open /System/Library/PreferencePanes/DateAndTime.prefPane 
... 

只要你發現了,一點點摸索,在/System/Library/PreferencePanes/第一個正確的文件。

我敢肯定,還有更多的可可方式來做到這一點最後的伎倆,仍然...這一個適用於每種語言。

另外:你可能要檢查這些路徑

/Library/PreferencePanes/ 
~/Library/PreferencePanes/ 

...因爲這就是第三方應用程序的安裝文件*.prefPane

0

您具體是如何使用腳本橋?

我試着用這個代碼,我認爲這表現相當不錯:

SystemPreferencesApplication *SystemPreferences = [SBApplication applicationWithBundleIdentifier:@"com.apple.systempreferences"]; 
@try { 
    [SystemPreferences activate]; 
    SystemPreferences.currentPane = [SystemPreferences.panes objectWithID:@"com.apple.preference.security"]; 
} @catch (NSException *exception) { 
    NSLog(@"%@", [exception description]); 
} 

這裏只是爲了好玩另一種選擇是可可,但是根本未記錄(只有用系統預置面板的作品)。您可以使用它來比較性能,但不要在生產代碼中使用它。

id bezelServicesTask = [NSConnection rootProxyForConnectionWithRegisteredName:@"com.apple.BezelServices" host:nil]; 
[bezelServicesTask performSelector:@selector(launchSystemPreferences:) withObject:@"Security.prefPane"]; 
+0

我有和你一樣的Scripting Bridge代碼(當然,減去異常代碼) - 我從蘋果示例中拿走了我的代碼。奇怪的是,如果我雙擊PreferencePanes文件夾中的prefpane文件,系統首選項將打開並立即加載窗格。 – 2009-11-18 22:29:02

+0

我使用Scripting Bridge進行了測試。但事實證明,它極其緩慢。 – 2012-07-22 20:58:51

8

比使用的文件系統路徑的更直接的方法是使用適當的資源URL用於與NSWorkspace偏好窗格如圖所示:

NSString *urlString = @"x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility"; 
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:urlString]]; 

其中urlString從一些可能的列表採取URL字符串https://macosxautomation.com/system-prefs-links.html

+1

完美!一種比當前接受的答案好得多的方法,尤其是因爲它允許您打開預設窗格中的特定部分。我特別希望將它打開到安全性前面板的輔助功能部分,因此您的回答對我來說尤其重要。 – GuyGizmo 2016-11-01 18:25:06

+0

再次想到,這種方法並不完美,因爲它在macOS 10.9中不起作用。但是在其他選項上回落並不是世界末日,並且在10.10及更高版本中使用它。 – GuyGizmo 2016-11-01 22:11:28

+0

對於10.10+,這應該是被接受的答案。完美的作品。 – Bryan 2017-06-29 08:19:35