2011-01-07 24 views

Respuesta

3

Suponiendo que esta se dirige a 10,6, se puede utilizar junto con NSRunningApplicationNSWorkspace. En primer lugar, debe determinar si la aplicación ya está en ejecución usando:

[[NSWorkspace sharedWorkspace] runningApplications] 

Si no se está ejecutando, entonces se puede poner en marcha usando NSWorkspace, pero recomiendo la nueva llamada, launchApplicationAtURL:options:configuration:error:, que devolverá un NSRunningApplication, que se puede usar para terminar la aplicación. Ver NSWorkspace para más detalles.

7

como se mencionó anteriormente es bastante fácil de lanzar otras aplicaciones con la ayuda de la clase NSWorkspace, por ejemplo:

- (BOOL)launchApplicationWithPath:(NSString *)path 
{ 
    // As recommended for OS X >= 10.6. 
    if ([[NSWorkspace sharedWorkspace] respondsToSelector:@selector(launchApplicationAtURL:options:configuration:error:)]) 
     return nil != [[NSWorkspace sharedWorkspace] launchApplicationAtURL:[NSURL fileURLWithPath:path isDirectory:NO] options:NSWorkspaceLaunchDefault configuration:nil error:NULL]; 

    // For older systems. 
    return [[NSWorkspace sharedWorkspace] launchApplication:path]; 
} 

Tienes que hacer un poco más de trabajo con el fin de dejar de otra aplicación, especialmente si el objetivo es anterior a 10.6, pero no es demasiado difícil. Aquí hay un ejemplo:

- (BOOL)terminateApplicationWithBundleID:(NSString *)bundleID 
{ 
    // For OS X >= 10.6 NSWorkspace has the nifty runningApplications-method. 
    if ([[NSWorkspace sharedWorkspace] respondsToSelector:@selector(runningApplications)]) 
     for (NSRunningApplication *app in [[NSWorkspace sharedWorkspace] runningApplications]) 
      if ([bundleID isEqualToString:[app bundleIdentifier]]) 
       return [app terminate]; 

    // If that didn‘t work then try using the apple event method, also works for OS X < 10.6. 

    AppleEvent event = {typeNull, nil}; 
    const char *bundleIDString = [bundleID UTF8String]; 

    OSStatus result = AEBuildAppleEvent(kCoreEventClass, kAEQuitApplication, typeApplicationBundleID, bundleIDString, strlen(bundleIDString), kAutoGenerateReturnID, kAnyTransactionID, &event, NULL, ""); 

    if (result == noErr) { 
     result = AESendMessage(&event, NULL, kAEAlwaysInteract|kAENoReply, kAEDefaultTimeout); 
     AEDisposeDesc(&event); 
    } 
    return result == noErr; 
} 
Cuestiones relacionadas