objective-c - 像从 cmd+tab 一样获取 ProcessList

标签 objective-c macos cocoa applescript applescript-objc

我想从 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 属性对应于 NSRunningApplicationactivationPolicy 属性,该属性不是 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/

相关文章:

xcode - FMDatabase/SQLite3 使用的 "Too many files open"问题

cocoa - NSTableView - NSButtonCell 数据源类型?

objective-c - 在 Mac 上创建自定义文件扩展名

objective-c - 如何改变 Cocoa 的 NSLevelIndicator 的色调颜色?

ios - iPhone SDK 蓝牙功能及其限制

ios - 返回 WF : _WebFilterIsActive returning: NO on device 的 MP3 流

ios - 编写单元测试以验证 NSTimer 是否已启动

objective-c - 滚动表格 View 时点击后退按钮时应用程序崩溃

Cocoa:如何将 bool 属性绑定(bind)到 NSCellStateValue?

objective-c - 从 Objective-C 类调用 Swift 函数