2009-11-18 55 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