1

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

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

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

4

3 回答 3

1

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

Apple的文档真的像它一样拼写出来。所有类都必须有一个容器,它是一个可变数组,需要先将它们添加到该容器中,然后才能对其进行操作,如生成的标题中所示...

@interface photoshopCS4Application : SBApplication

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

...这就是我们可用的顶级容器的完整列表。该open命令需要生成photoshopCS4OpenOptions和填充。因为 API 没有公开数组来存储新创建的 photoshopCS4OpenOptions 对象,所以我们不能使用新创建的photoshopCS4OpenOptions对象。因此,我们无法制作目标文档,并且通过扩展无法使用openScripting Bridge 中的命令。所有需要某种选项对象的命令也是如此。

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

于 2011-01-21T14:45:55.000 回答
1

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

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

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

[[NSWorkspace sharedWorkspace] openFile:@"/Users/bavarious/Desktop/test.psd"];
于 2011-01-21T15:26:57.060 回答
0

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

这是使用它的代码:

APApplication *adobePhotoshopCs4 = [APApplication applicationWithName:@"Adobe Photoshop CS4"]; id 结果 = [[adobePhotoshopCs4 open_] 发送];

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

于 2011-01-21T17:24:26.897 回答