2011-03-13 16 views
5

Necesito dejar de usar otras aplicaciones de cacao. Tengo un diccionario de información de usuario de una notificación que me dice el nombre de la aplicación. Intenté terminar los métodos y forzar Terminar, pero no funcionaron (creo que solo están disponibles en el leopardo de las nieves).Salir de otras aplicaciones en el cacao

+0

Si usted no tiene 300 puntos de cómo se puede hacer una recompensa? –

+2

@boyfarrell - Puse la recompensa. – pasawaya

Respuesta

2

Puede enviar la solicitud al salir de AppleEvent, solicitando la retirada de la aplicación, pero no creo que puede obligar a una aplicación a abandonar sin privilegios elevados. Eche un vistazo al marco Scripting Bridge para la forma más fácil de enviar los eventos requeridos.

3

Utilizamos -[NSWorkspace runningApplications]. Requiere 10.6 o más.

void SendQuitToProcess(NSString* named) 
{ 

    for (id app in [[NSWorkspace sharedWorkspace] runningApplications]) 
    { 
     if ([named isEqualToString:[[app executableURL] lastPathComponent]]) 
     { 
      [app terminate]; 
     } 
    } 

} 

de lo contrario, tendrá que usar AppleScript. Usted puede hacer algo cursi como esto:

void AESendQuitToProcess(const char* named) 
{ 
    char temp[1024]; 

    sprintf(temp, "osascript -e \"tell application \\\"%s\\\"\" -e \"activate\" -e \"quit\" -e \"end tell\"", named); 

    system(temp); 
} 
+0

Se ve bien, lo probaré más tarde hoy. – pasawaya

3

La mejor solución (que representan todos los diferentes disponibles de API en los últimos 3-4 versiones de OS X) va a ser el uso de AppleScript. Simplemente genere el script necesario en Obj-C/Python/Java, sea lo que sea que esté usando (supongo que Obj-C ya que dijo específicamente 'In Cocoa'). Y ejecutarlo utilizando la clase NSAppleScript (un ejemplo artificioso):

// Grab the appName 
NSString *appName = [someDict valueForKey:@"keyForApplicationName"]; 
// Generate the script 
NSString *appleScriptString = 
    [NSString stringWithFormat:@"tell application \"%@\"\nquit\nend tell", 
           appName]; 
// Execute the script 
NSDictionary *errorInfo = nil; 
NSAppleScript *run = [[NSAppleScript alloc] initWithSource:theScript]; 
NSAppleEventDescriptor *theDescriptor = [run executeAndReturnError:&errorInfo]; 
// Get the result if your script happens to return anything (this example 
// really doesn't return anything) 
NSString *theResult = [theDescriptor stringValue]; 
NSLog(@"%@",theResult); 

Esto funciona de manera efectiva un guión que (si appName era 'Safari') se ve así:

tell application "Safari" 
quit 
end tell 

Eso o echa un vistazo a este SO pregunta

Terminating Another App Running - Cocoa

+0

Esto fue bueno, pero no funciona para todas las aplicaciones, por lo que subí pero no otorgué la recompensa. – pasawaya

Cuestiones relacionadas