gpt4 book ai didi

objective-c - 用于启动带有参数的应用程序的 Cocoa 代码

转载 作者:太空狗 更新时间:2023-10-30 03:53:21 24 4
gpt4 key购买 nike

我想要一个相当于命令行工具的 Cocoa open(1) ,特别是对于这种形式的用法:

open -a <SomeApplication> <SomeFile> --args <Arg1> <Arg2> ...

以 QuickTime 为例。以下命令行将使用 QuickTime 打开一个文件,参数可以控制 QuickTime 是否在启动时播放该文件。

open -a "QuickTime Player" a.mp4 --args -MGPlayMovieOnOpen 0 # or 1

我已阅读 Launching an Mac App with Objective-C/Cocoa . prosseek's answer ,我认为这相当于 open -a <App> <File> , 当我没有指定任何参数时效果很好。 ughoavgfhw's answer ,我认为这相当于 open -a <App> --args <Arg1> <Arg2> ... ,当我没有指定要打开的任何文件时效果很好。但两者都不能同时指定文件名和参数。

我还尝试将文件名附加到参数列表中,这是 unix 程序常用的方法。貌似有的应用可以接受,有的不可以。 QuickTime 提示错误,说它无法打开文件。我正在使用以下代码。

NSWorkspace *workspace = [NSWorkspace sharedWorkspace];
NSURL *url = [NSURL fileURLWithPath:[workspace fullPathForApplication:@"QuickTime Player"]];
NSArray *arguments = [NSArray arrayWithObjects:@"-MGPlayMovieOnOpen", @"0", @"a.mp4", nil];
[workspace launchApplicationAtURL:url options:0 configuration:[NSDictionary dictionaryWithObject:arguments forKey:NSWorkspaceLaunchConfigurationArguments] error:nil];
// open -a "QuickTime Player" --args -MGPlayMovieOnOpen 0 a.mp4

打开文件的机制似乎与通常的论点不同。任何人都可以解释 open(1) 的内部结构吗? ,或者只是给我一个解决方案?谢谢。

最佳答案

您可能希望通过管道传输任务的输出,以便了解结果。 “a.mp4”需要是文件的完整路径。

NSArray *args = [NSArray arrayWithObjects:@"-a", @"QuickTime Player", @"--args", @"a.mp4", nil];
NSTask *task = [NSTask new];
[task setLaunchPath:@"/usr/bin/open"];
[task setArguments:args];

[task launch];

关于objective-c - 用于启动带有参数的应用程序的 Cocoa 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12991323/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com