views:

454

answers:

2

I've got a C++ app that I'm porting from Win32 to OSX. I'd like to be able to launch arbitrary files as if the user opened them. This is easy on windows using ShellExecute. How do I accomplish the same thing on the Mac?

Thanks!

+6  A: 

You can call system(); in any C++ application. On OSX, you can use the open command to launch things as if they were clicked on.

From the documentation for open:

The open command opens a file (or a directory or URL), just as if you had double-clicked the file's icon. If no application name is specified, the default application as determined via LaunchServices is used to open the specified files.

All together, it would look like:

string command = "open " + filePath;
system(command.c_str());
e.James
I think the windows equivalent is `"start " + filePath;`
MSalters
+4  A: 

Another suggestion if you're working with cocoa:

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

There are other similar methods in NSWordspace as well. For example to open an application or a URL:

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

Working through [NSWorkspace sharedWorkspace] can give you a bit more control than the standard C system() call.

Edit: Note that you can use Objective-C++ to mix C++ code with Objective-C code and thereby call cocoa methods.

Naaff