在OSX Cocoa应用程序中,我想要一个可以打开“语音”首选项 Pane 的按钮。那可能吗?我只是想为他们节省时间去系统偏好设置>语音>文本到语音

最佳答案

以下是一种相当简单(可靠)的方法,至少可以将系统偏好设置打开到Speech.prefPane:

- (IBAction)openSpeechPrefs:(id)sender {
    [[NSWorkspace sharedWorkspace] openURL:
     [NSURL fileURLWithPath:@"/System/Library/PreferencePanes/Speech.prefPane"]];
}

但是,它不一定切换到Text to Speech选项卡,而是用户选择的最后一个选项卡。

也可以实际切换到“文本到语音”选项卡,但是涉及的内容更多。您可以使用AppleScript将命令发送到“系统偏好设置”应用程序,但是使用ScriptingBridge.framework(请参阅Scripting Bridge Programming Guide)要快得多。

您需要将ScriptingBridge.framework添加到您的项目中,然后在Terminal中使用类似以下的命令来生成SBSystemPreferences.h头文件来使用:
sdef "/Applications/System Preferences.app" | sdp -fh --basename SBSystemPreferences -o ~/Desktop/SBSystemPreferences.h
SBSystemPreferences.h header 添加到您的项目中,然后将-openSpeechPrefs:更改为以下内容:
- (IBAction)openSpeechPrefs:(id)sender {
    SBSystemPreferencesApplication *systemPrefs =
    [SBApplication applicationWithBundleIdentifier:@"com.apple.systempreferences"];

    [systemPrefs activate];

    SBElementArray *panes = [systemPrefs panes];
    SBSystemPreferencesPane *speechPane = nil;

    for (SBSystemPreferencesPane *pane in panes) {
        if ([[pane id] isEqualToString:@"com.apple.preference.speech"]) {
            speechPane = pane;
            break;
        }
    }
    [systemPrefs setCurrentPane:speechPane];

    SBElementArray *anchors = [speechPane anchors];

    for (SBSystemPreferencesAnchor *anchor in anchors) {
        if ([anchor.name isEqualToString:@"TTS"]) {
            [anchor reveal];
        }
    }
}

编辑:

使用ScriptingBridge.framework方法的示例项目:
http://github.com/NSGod/OpenSystemPrefsTTS

关于cocoa - cocoa 按钮可打开“系统偏好设置”页面,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6652598/

10-09 09:37