0

我想从 OS X 中的 cmd+tab 菜单中获取应用程序。我现在得到的最好方法是将它与 AppleScript 调用关联起来:

NSDictionary *errorDict;
NSAppleEventDescriptor *returnValue;
NSString *appleScriptText = @"tell application \"System Events\" to get name of (processes where background only is false)";
NSAppleScript *script = [[NSAppleScript alloc] initWithSource:appleScriptText];

然后遍历从它返回的东西并将其匹配到,[[NSWorkspace sharedWorkspace] runningApplications]但这似乎有点太奇怪了,无法完成这项任务。

所以我的问题是:有没有一种不像这个那样古怪的方法?

我真的很紧张的答案。

4

1 回答 1

3

鉴于您已经熟悉-[NSWorkspace runningApplications],为什么不遍历这些并检查哪些符合您的条件?该background only属性对应于NSRunningApplication'activationPolicy属性不是NSApplicationActivationPolicyRegular.

所以,类似(未测试):

NSArray* apps = [[NSWorkspace sharedWorkspace] runningApplications];
NSIndexSet* indexes = [apps indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop){
    return [obj activationPolicy] == NSApplicationActivationPolicyRegular;
}];
NSArray* names = [[apps objectsAtIndexes:indexes] valueForKey:@"localizedName"];
于 2013-04-29T20:38:02.707 回答