2009-05-13 13 views
8

Tengo una aplicación C++ que transfiero desde Win32 a OSX. Me gustaría poder ejecutar archivos arbitrarios como si el usuario los abriera. Esto es fácil en Windows usando ShellExecute. ¿Cómo logro lo mismo en la Mac?equivalente OSX de ShellExecute?

Gracias!

Respuesta

14

Puede llamar al system(); en cualquier aplicación C++. En OSX, puede utilizar el comando open para iniciar cosas como si se hubiera hecho clic en ellas.

De la documentación abierta:

La orden de apertura se abre un archivo (o un directorio o URL), al igual que si tuviera doble clic en el icono del archivo. Si no se especifica ningún nombre de aplicación, la aplicación predeterminada tal como se determina a través de LaunchServices se usa para abrir los archivos especificados.

Todos juntos, que se vería así:

string command = "open " + filePath; 
system(command.c_str()); 
+0

Creo que el equivalente de Windows es '" start "+ filePath;' – MSalters

9

Otra sugerencia si se trabaja con cacao:

[[NSWorkspace sharedWorkspace] openFile:@"pathToFile"]; 

Hay otros métodos similares en NSWorkspace también. Por ejemplo, para abrir una aplicación o una URL:

[[NSWorkspace sharedWorkspace] launchApplication:@"pathToApplication"]; 
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"URL"]]; 

Trabajando a través de [NSWorkspace sharedWorkspace] le puede dar un poco más de control que el estándar llamada C system().

Editar: Tenga en cuenta que se puede utilizar para mezclar Objective-C++ código C++ con código de Objective-C y por lo tanto llamar a métodos de cacao.

0

Puede simplemente usar el sistema(); función. Por ejemplo, supongamos que quieres poner tu dock en la esquina de la pantalla.

Usted puede poner simplemente:

system(defaults write com.apple.dock pinning -string end); 
sleep(1f); 
system(killall Dock); 

Es así de fácil. Espero que haya ayudado :)

+1

Eso es correcto, aunque deberá agregar comillas alrededor del argumento system(). – cypheon