2012-04-30 2 views
0

Donc j'essaie de faire un si basé sur si iTunes est en cours d'exécution ou non. J'ai besoin de cela parce que mon application obtient le nom de la piste. Ce nom de piste a déjà été accompli et fonctionne mais je ne veux pas que iTunes fonctionne toujours ...iTunes isRunning avec NSTask

J'ai donc décidé d'essayer un NSTask avec l'instance de setLaunchPath pour vérifier si iTunes.app est en train de tourner. Le code ci-dessous est explicite, mais pour une raison quelconque, il continue de frapper mon autre si iTunes est ouvert. J'appelle cette méthode dans mon awakeFromnib par un nstimer toutes les 5 secondes.

-(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"); 
} 

} 

Répondre

0

Je l'ai trouvé en utilisant le code ci-dessous. J'espère que ce post est utile!

-(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."); 
    } 
} 


}