以编程方式打开prefpane的最快方法?

时间:2009-11-18 00:31:59

标签: objective-c cocoa macos

AppleScript太慢,所以我尝试使用ScriptingBridge打开System Preferences.app并设置当前窗格,这也太慢了。有更快的方法吗?适当

4 个答案:

答案 0 :(得分:8)

比使用文件系统路径更直接的方法是使用NSWorkspace的首选项窗格的相应资源URL,如下所示:

library("sandwich")
library("lmtest")
coeftest(mult_fe)

其中NSString *urlString = @"x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility"; [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:urlString]]; 取自某些可能的网址字符串列表https://macosxautomation.com/system-prefs-links.html

答案 1 :(得分: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文件

的地方

答案 2 :(得分:5)

使用Launch Services或NSWorkspace打开prefpane包。这是open(1)命令的编程版本。

答案 3 :(得分: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]);
}

这是另一个有趣的选择,它是Cocoa,但根本没有记录(并且仅适用于系统首选项窗格)。您可以使用它来比较性能,但不要在生产代码中使用它。

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