使用ScriptingBridge打开文件

时间:2011-01-20 20:51:23

标签: objective-c applescript photoshop scripting-bridge

我有一个AppleScript,我试图转换为ScriptingBridge。由于我的应用程序是C ++ / Obj-C应用程序,因此ScriptingBridge更易于使用且速度更快(更不用说我讨厌动态构建AppleScripts)。

AppleScript向Photoshop发送消息以打开文件。 file参数以alias的形式发送,但ScriptingBridge将参数作为id导入。我不知道我应该传递什么Obj-C对象?

我尝试过传递NSURL和NSString(可能不正确:-P),但无济于事。关于我应该为文件别名传递什么的任何建议?

3 个答案:

答案 0 :(得分:1)

简短的回答是,您无法使用Scripting Bridge在Photoshop中打开文档。

Apple的文档确实拼写出来就像它一样。所有类都必须有一个容器,这是一个可变数组,需要在它们被操作之前添加它们,如生成的标题中所示......

@interface photoshopCS4Application : SBApplication

- (SBElementArray *) documents;
- (SBElementArray *) fonts;
- (SBElementArray *) notifiers;

...这是我们可用的顶级容器的完整列表。 open命令需要生成并填充photoshopCS4OpenOptions。由于API不公开数组以存储新创建的photoshopCS4OpenOptions对象,因此我们无法使用新创建的photoshopCS4OpenOptions对象。因此,我们无法创建目标文档,并且通过扩展无法在Scripting Bridge中使用open命令。所有需要某种选项对象的命令都可以这样说。

我解决的唯一解决方法是打开一个文档,其中包含从Cocoa调用的本机Applescript或objc-appscript,然后解析documents数组,查找刚刚打开的文件。它并不理想,但后来也不是Scripting Bridge,因为它要求应用程序开发人员以非常特定的方式编写脚本API,这些方式不是OSA框架的原生。

答案 1 :(得分:1)

如果您的程序打开Photoshop文档可以在AppleScript脚本/ Scripting Bridge代码之外执行,Cocoa提供了一种方法来打开具有特定应用程序的文件:

[[NSWorkspace sharedWorkspace] openFile:@"/Users/bavarious/Desktop/test.psd" withApplication:@"Adobe Photoshop CS4"];

或者,如果您想使用处理该文件类型的默认应用程序,您可以完全删除应用程序名称:

[[NSWorkspace sharedWorkspace] openFile:@"/Users/bavarious/Desktop/test.psd"];

答案 2 :(得分:0)

考虑Appscript。 http://appscript.sourceforge.net/

以下是使用该代码的代码:

APApplication * adobePhotoshopCs4 = [APApplication applicationWithName:@“Adobe Photoshop CS4”]; id result = [[adobePhotoshopCs4 open_] send];

(注意,我不是Cocoa程序员 - 我主要使用Appscript和Python,但Appscript附带了ASTranslate,它将Applescript转换为Python,Ruby或Obj-C,这就是输出 - 但我发现存在微妙的错误在过去有时与翻译一起)