我想从 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"];
关于objective-c - 像从 cmd+tab 一样获取 ProcessList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16287382/