我正在尝试启动一个应用程序并通过 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