2009-05-13 7 views
8

J'ai une application C++ que je porte de Win32 à OSX. J'aimerais pouvoir lancer des fichiers arbitraires comme si l'utilisateur les avait ouverts. C'est facile sur Windows en utilisant ShellExecute. Comment puis-je accomplir la même chose sur le Mac?OSX équivalent de ShellExecute?

Merci!

Répondre

14

Vous pouvez appeler system(); dans n'importe quelle application C++. Sous OSX, vous pouvez utiliser la commande open pour lancer les opérations comme si elles avaient été cliquées.

De la documentation ouverte:

La commande ouverte ouvre un fichier (ou un répertoire ou URL), comme si vous aviez un double-clic sur l'icône du fichier. Si aucun nom d'application n'est spécifié, l'application par défaut déterminée par LaunchServices est utilisée pour ouvrir les fichiers spécifiés.

Tous ensemble, il ressemblerait à ceci:

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

Je pense que l'équivalent de Windows est '" start "+ filePath;' – MSalters

9

Une autre suggestion si vous travaillez avec du cacao:

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

Il existe d'autres méthodes similaires à NSWorkspace aussi bien. Par exemple, pour ouvrir une application ou une URL:

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

Travailler par [NSWorkspace sharedWorkspace] peut vous donner un peu plus de contrôle que l'appel C standard system().

Édition: Notez que vous pouvez utiliser Objective-C++ pour mélanger du code C++ avec du code Objective-C et ainsi appeler des méthodes de cacao.

0

Vous pouvez simplement utiliser le système(); fonction. Par exemple, disons que vous vouliez mettre votre dock dans le coin de l'écran.

Vous pouvez simplement mettre:

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

Il est facile. J'espère avoir aidé :)

+1

C'est correct, même si vous aurez besoin d'ajouter des guillemets autour de l'argument system(). – cypheon