iTunes正在使用NSTask运行

时间:2012-04-30 14:51:57

标签: boolean itunes nstimer nstask

所以我试图根据iTunes是否正在运行制作if。我需要这个,因为我的应用程序获取了曲目名称。这个曲目名称已经完成并且有效,但我不希望iTunes一直在运行......

所以我决定尝试使用setLaunchPath实例的NSTask来检查iTunes.app是否正在运行。下面的代码是自我解释的,但由于某种原因,如果iTunes打开,它会一直打到我的其他代码。我每隔5秒就通过一个nstimer在我的awakeFromnib中调用这个方法。

-(IBAction)ifRunning:(id)pID; {
NSTask *task = [[NSTask alloc] init];
[task setLaunchPath:@"/Applications/iTunes.app/Contents/MacOS/iTunes"];
if ([task isRunning]==TRUE) {
    NSLog(@"iTunes is Running, hit if");
    NSString *track = ([self getCurrentTrack]);
    //getCurrentTrack another one of my methods


}

else if ([task isRunning] == FALSE) {
    NSLog(@"iTunes is not running, hit else if");\
    [trackName setTitle:(@"iTunes is Not Playing")];

}

else {
    NSLog(@"Hit else");
}

}

1 个答案:

答案 0 :(得分:0)

我用下面的代码想出来了。希望这篇文章有用!

-(IBAction)ifRunning:(id)pID; {
NSLog(@"Process check ");
NSWorkspace *ws = [NSWorkspace sharedWorkspace];
NSArray *runningAppDictionaries = [ws launchedApplications];
NSDictionary *aDictionary;

for (aDictionary in runningAppDictionaries)
{
    //  NSLog(@"Open App: %@", [aDictionary valueForKey:@"NSApplicationName"]);

    if ([[aDictionary valueForKey:@"NSApplicationName"] isEqualToString:@"iTunes"])
    {
        NSLog(@"iTunes is Is Running");
        [self getCurrentTrack:nil];
        break;
    }

    else {
        NSLog(@"iTunes is not running.");
    }
} 


}