OSX中类似于ShellExecute的功能是什么?

10

我正在将一款C++应用从Win32移植到OSX,想要能够像用户打开文件一样启动任意文件。在Windows上使用ShellExecute非常简单,那么在Mac上如何实现相同的功能呢?

谢谢!

3个回答

15

在任何C++应用程序中,您都可以调用system();。在OSX上,您可以使用open命令来启动东西,就像单击它们一样。

根据 open 的说明文档:

open 命令打开一个文件(或目录或 URL),就像您双击文件图标一样。如果未指定应用程序名称,则使用通过 LaunchServices 确定的默认应用程序来打开指定的文件。

总体而言,它看起来像这样:

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

我认为 Windows 的等效命令是 "start " + filePath; - MSalters
但是在Windows上,我们不需要完整路径,如果应用程序已安装并添加到Windows的PATH中。例如:ShellExecute(0, L"open", L"Filename.exe", 0, 0, SW_SHOW); 我如何在Mac上做同样的事情? - woland

9
如果您正在使用Cocoa,请考虑另一个建议:
[[NSWorkspace sharedWorkspace] openFile:@"pathToFile"];

NSWorkspace中还有其他类似的方法。例如,打开应用程序或URL:

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

通过使用[NSWorkspace sharedWorkspace],您可以比标准的C system()调用更加控制。
注意,您可以使用Objective-C++将C ++代码与Objective-C代码混合,并通过此调用cocoa方法。

0

你可以简单地使用system()函数。例如,假设你想把你的Dock放在屏幕的角落。

你可以简单地输入:

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

就是这么简单。 希望我有所帮助 :)


1
没错,不过你需要在system()参数周围添加引号。 - cypheon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接