8

我正在尝试为我的最后一个活动应用程序执行复制/粘贴,这是我的代码:

NSString *appleScriptSource = [NSString stringWithFormat:@"\ntell application \"%@\" to activate\ntell application \"System Events\" to tell process \"%@\"\nkeystroke \"v\" using command down\nend tell", [lastApp localizedName], [lastApp localizedName]];

NSDictionary *error;
NSAppleScript *aScript = [[NSAppleScript alloc] initWithSource:appleScriptSource];
NSAppleEventDescriptor *aDescriptor = [aScript executeAndReturnError:&error];

问题是在某些计算机上它工作得很好,但在其他计算机上却失败了。executeAndReturnError 返回的错误的错误输出是:

2012-06-13 17:43:19.875 Mini Translator[1206:303] (null) (error: {
    NSAppleScriptErrorBriefMessage = "Expected end of line but found \U201c\"\U201d.";
    NSAppleScriptErrorMessage = "Expected end of line but found \U201c\"\U201d.";
    NSAppleScriptErrorNumber = "-2741";
    NSAppleScriptErrorRange = "NSRange: {95, 1}";
})

我似乎无法弄清楚这意味着什么或为什么会发生。

我们尝试将生成的 apple-script 代码复制到 Apple Script 编辑器中,在这里它工作得很好。

我的应用程序是沙盒的 - 我已经为我想要支持的应用程序添加了密钥“com.apple.security.temporary-exception.apple-events”的捆绑标识符。

有什么建议么?

4

1 回答 1

6

我猜 \u201c 和 \u201d 是红鲱鱼,只是代表苹果脚本产生的错误消息中双引号周围的智能引号,而您的问题在于您正在格式化为脚本的最后一个应用程序的本地化名称。我不知道为什么你可能会在一台机器上看到这个而不是另一台。

例如,如果名称是 'Some " App',那么双引号最终会不匹配,因为它最终会注入双引号字符串的中间。您可能想尝试将名称中的任何双引号替换为 '\ "' 这将逃脱他们。

例如

NSString *esc = [[lastApp localizedName] stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""];
于 2012-07-05T21:13:48.407 回答