我想从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]
匹配,但这似乎有点怪异,无法完成此任务。所以我在这里的问题是:有没有一种方法不像这个方法那么古怪?
我真的很紧张的答案。
最佳答案
鉴于您已经熟悉-[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"];