NSAppleScript使用给定的NSRange突出显示任何Mac应用中的文本

时间:2018-10-26 06:41:21

标签: objective-c macos cocoa nsapplescript

我试图通过使用NSAppleScript通过可能定制的Mac应用程序突出显示任何Mac应用程序中的文本。我已经尝试过下面的代码,但它不起作用。

NSAppleScript* scriptObject = [[NSAppleScript alloc] initWithSource:[NSString stringWithFormat:@"\
tell application \"%@\"\n\
activate\n\
end tell\n\
tell application \"%@\"\n\
set theRange to create range start %ld end %ld\n\
set highlight color index of theRange to %@\n\
end tell\n\
",[[NSUserDefaults standardUserDefaults] valueForKey:@"AppName"],[[NSUserDefaults standardUserDefaults] valueForKey:@"AppName"],(unsigned long)range.location, (unsigned long)(range.location+range.length),@"yellow"]];

但是我遇到了以下错误:

NSAppleScriptErrorBriefMessage = "Expected end of line but found identifier.";
    NSAppleScriptErrorMessage = "Expected end of line but found identifier.";
    NSAppleScriptErrorNumber = "-2741";
    NSAppleScriptErrorRange = "NSRange: {459, 5}";

还有其他方法可以做到吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

这不适用于所有应用程序,因为NSUserDefaults中指定的应用程序必须具有AppleScript词典,并且该词典必须包含命令,属性和类。

许多应用程序根本无法编写脚本,并且几乎所有应用程序都不了解create rangehighlight color index

该错误是编译错误。


从ObjC的角度来看,切勿将valueForKey:NSUserDefaults一起使用,除非您可以解释为什么在这种情况下明确需要KVC。有stringForKey:个对象,id个对象是objectForKey: