Я пытаюсь определить, какое приложение OSX активно. Я понимаю, что в OSX 10.5 это можно сделать с помощью:
[[NSWorkspace sharedWorkspace] activeApplication]
однако это устарело в 10.6 +.
Документация разработчиков Apple заявляет, что это должно быть сделано через свойство "active" объекта 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 --- это моя первая попытка объективного C, поэтому я знаю, что это может быть ужасно уродливым для обученного глаза! Пожалуйста, простите меня!:) Любые предложения приветствуются.)