cocoa - helmet - react open graph
¿Cómo lanzar la aplicación y traerla al frente usando Cocoa api? (6)
Soy muy nuevo en la programación de cacao y no puedo encontrar la manera de hacer lo siguiente:
- Iniciar una aplicación particular por nombre
- Haz algo de trabajo
- Más tarde traigo esa aplicación que he empezado a ser el proceso frontal.
Por lo que he encontrado en Carbon API, parece que las llamadas que debo usar son launchApplication () y setFrontProcess ().
¿Pero cómo hacer esto en cacao? Es decir, lanzarlo, obtener PID, establecer que PID sea un proceso frontal. Intenté buscar ejemplos en google y no encontrar nada ...
Si alguno de ustedes puede proporcionar una muestra minimalista que sería increíble :)
Gracias por adelantado.
En swift 4, puedes usar NSWorkspace.shared.launchApplication(appName:)
para abrir una aplicación. También hace que la aplicación lanzada al frente en mi caso.
También puedes probar:
do {
try NSWorkspace.shared.launchApplication(at: yourAppURL,
options: .andHideOthers,
configuration: [:])
} catch {
printError("Failed to launch the app.")
}
Opción
andHideOthers
OcultarandHideOthers
: Oculta todas las aplicaciones, excepto la recién lanzada.
NSRunningApplication está disponible en Mac OS X 10.6 o posterior.
Si tiene que admitir sistemas anteriores, esto se puede hacer con API como GetCurrentProcess () y SetFrontProcess () y la antigua estructura ProcessSerialNumber.
Para iniciar una aplicación, use la clase NSWorkspace : Referencia de NSWorkspace
En concreto, la aplicación launchApplication:
.
No sé la respuesta de la parte de activación de mi cabeza. Puede activar su propia aplicación con -[NSApplication activateIgnoringOtherApps:]
, pero no sé cómo hacerlo para otras aplicaciones.
Para iniciar una aplicación:
[[NSWorkspace sharedWorkspace] launchApplication:@"/Applications/Safari.app"];
Para activar una aplicación:
NSRunningApplication* app = [NSRunningApplication
runningApplicationWithProcessIdentifier: PID];
[app activateWithOptions: NSApplicationActivateAllWindows];
// or
NSArray* apps = [NSRunningApplication
runningApplicationsWithBundleIdentifier:@"com.bla.blah"];
[(NSRunningApplication*)[apps objectAtIndex:0]
activateWithOptions: NSApplicationActivateAllWindows];
Para la versión Swift2
Ejecutar aplicación:
let task = NSTask()
task.launchPath = "/usr/bin/env"
task.arguments = ["/Applications/TextEdit.app/Contents/MacOS/TextEdit"]
task.launch()
Para obtener la aplicación utilizando el identificador de paquete:
var apps: [AnyObject] = NSRunningApplication.runningApplicationsWithBundleIdentifier("com.apple.TextEdit")
var MyApp: [NSRunningApplication] = apps as! [NSRunningApplication]
for app in MyApp
{
}
Todavía estoy tratando de encontrar el modo de conocer el estado de la aplicación "activo", "ocultar", etc. Pero no tengo éxito hasta ahora.