0

我正在尝试启动一个应用程序并通过 applescript 在其中打开一个文件。我可以通过 Apple Script Editor 做到这一点。这是我写的脚本:

set AppPath to "<My App Path.app>"
tell application AppPath
    if it is running then
        activate
    else
        launch
    end if
    tell application AppPath to open POSIX file "<My File Path>"
end tell

如果应用程序在后台运行,单独启动无法将其带到前台(在脚本编辑器上方)。如果应用程序未运行,则激活无法显示启动画面。这就是为什么,我使用机器人启动和激活。

该脚本工作正常。但我需要我的 c++ 程序中的脚本。应用程序路径和文件路径将在运行时决定。所以我将脚本生成为 NSAppleScript 并执行脚本。生成的 NSApplescript 如下所示:

do shell script "osascript -e 'set AppPath to \"<My App Path.app>\"' 
-e 'tell application AppPath' -e 'if it is running then' -e 'activate' 
-e 'else' -e 'launch' -e 'endif' 
-e 'tell application AppPath to open POSIX file \"<My File Path>\"'"

以上所有代码都在一行中,为了便于阅读,我将其打破。我收到一条错误消息variable e is not defined。这没有被执行。

我用来生成这个脚本的代码是:

NSMutableString *script = [NSMutableString stringWithCapacity:512];
[script appendString:@"do shell script \"osascript "];
[script appendString:@"-e 'set AppPath to \\\""];
[script appendString:pathToApp];
[script appendString:@"\\\"'"];
[script appendString:@" -e 'tell application AppPath'"];
[script appendString:@" -e 'if it is running then'"];
[script appendString:@" -e 'activate'"];
[script appendString:@" -e 'else'"];
[script appendString:@" -e 'launch'"];
[script appendString:@" -e 'end if'"];
[script appendString:@" -e 'tell application AppPath to open POSIX file \\\""];
[script appendString:pathToFile];
[script appendString:@"\\\"'"];
[script appendString:@"\"\r"];

我按照 user309603 的建议在 -e 之前添加了空格。现在我收到一个新错误:

错误“266:266:语法错误:预期行尾等,但发现脚本结尾。(-2741)”编号 1

4

2 回答 2

0

不要使用代码生成。只是不要。如果你认为你需要代码生成,那你就错了。osascript 和 NSAppleScript 都允许您将参数传递给现有的 AppleScript。

对于像打开文件这样简单的事情,您根本不需要 AppleScript。使用NSWorkspaceLaunchServices

于 2014-04-29T10:30:06.560 回答
0

告诉块必须在最后一行关闭(就像你在 AS 编辑器中写的一样)

[script appendString:@" -e 'end tell'"];

顺便说一句,在倒数第二行中tell application AppPath to不需要该部分。

于 2014-04-29T07:01:51.173 回答