【发布时间】:2011-12-01 21:36:15
【问题描述】:
我正在尝试确定当前处于活动状态的 OSX 应用程序。我知道在 OSX 10.5 中,这可以通过以下方式完成:
[[NSWorkspace sharedWorkspace] activeApplication]
但是,这已在 10.6+ 中被弃用。
Apple 开发人员文档指出,这应该通过 NSRunningApplication 对象的“活动”属性来完成。我认为解决此问题的一种方法可能是通过
获取所有正在运行的应用程序的列表[[NSWorkspace sharedWorkspace] runningApplications]
然后循环,检查每个应用程序的“活动”属性。但是,以下测试代码的行为与我预期的不同:从 Terminal.app 编译和运行时,只有“终端”应用程序被标记为活动,无论我是否选择其他应用程序。
#import <Foundation/Foundation.h>
#import <AppKit/NSRunningApplication.h>
#import <AppKit/NSWorkspace.h>
int main(int argc, char *argv[]) {
while(1){
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSString *currApp;
NSArray *runningApps;
runningApps = [[NSWorkspace sharedWorkspace] runningApplications];
for (id currApp in runningApps) {
if ([currApp isActive])
NSLog(@"* %@", [currApp localizedName]);
else
NSLog(@" %@", [currApp localizedName]);
}
sleep(1);
[pool release];
}
return 0;
}
我做错了什么?我是否误解了“活动”属性的工作原理?
(另外,请随意批评我的 Objective C 代码 --- 这是我第一次尝试 Objective C,所以我知道它对于受过训练的眼睛来说可能非常丑陋!请原谅我!:) 欢迎任何建议.)
【问题讨论】:
-
嗨乔希---不;我实际上是在 10.6 上编码,而 ownsMenuBar 是 10.7。不过谢谢你的建议。
-
使用
NSRunningApplication.current
标签: objective-c cocoa