没有sdef的ScriptingBridge? (可可)

时间:2013-02-16 22:10:01

标签: objective-c xcode cocoa scripting-bridge

我想获取当前有效应用的属性。我知道这应该可以使用ScriptingBridge,但是,这似乎要求您生成一个sdef文件并将其导入到您尝试定位的应用程序的项目中。由于我想定位所有应用,是否有其他方法可以做到这一点?

访问系统首选项的示例:

    SystemPreferencesApplication *systemPreferences =
[SBApplication
 applicationWithBundleIdentifier:@"com.apple.systempreferences"];

如果有其他方法可以访问任何有效应用的属性,请分享。 (例如;窗口标题)

感谢。

2 个答案:

答案 0 :(得分:0)

您可以使用

获取每个当前正在运行的应用程序的列表
NSWorkSpace.sharedWorkspace.runningApplications;

该数组中的每个对象都应该是NSRunningApplication,您可以自由查询和操作。

答案 1 :(得分:0)

我假设你想要运行一个AppleScript。如果要运行很多AppleScript代码,那么脚本桥很好。但是,如果你只有少量,那么使用NSApplescript就更简单了。

例如,如果你想运行这个AppleScript ...

tell application "System Events"
    set theProcesses to processes
    repeat with aProcess in theProcesses
        tell aProcess to get properties
    end repeat
end tell

然后你可以这样写...

NSString* cmd = @"tell application \"System Events\"\nset theProcesses to processes\nrepeat with aProcess in theProcesses\ntell aProcess to get properties\nend repeat\nend tell";
NSAppleScript* theScript = [[NSAppleScript alloc] initWithSource:cmd];
NSDictionary* errorDict = nil;
NSAppleEventDescriptor* result = [theScript executeAndReturnError:&errorDict];
[theScript release];
if (errorDict) {
    NSLog(@"Error:%@ %@", [errorDict valueForKey:@"NSAppleScriptErrorNumber"], [errorDict valueForKey:@"NSAppleScriptErrorMessage"]);
    return;
}

// do something with result
NSLog(@"result: %@", result);