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