1

ScriptingBridge に変換しようとしている AppleScript があります。私のアプリケーションは C++/Obj-C アプリケーションなので、ScriptingBridge の方がはるかに使いやすく、かなり高速です (言うまでもなく、AppleScript を動的に構築するのは嫌いです)。

AppleScript は、ファイルを開くように Photoshop にメッセージを送信します。file パラメータは として送信されますが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コマンドでは、を生成して入力する必要があります。photoshopCS4OpenOptionsAPI は、新しく作成された photoshopCS4OpenOptions オブジェクトを格納する配列を公開しないため、新しく作成されたphotoshopCS4OpenOptionsオブジェクトを使用することはできません。そのため、対象となるドキュメントを作成できず、拡張によりopenScripting Bridge でコマンドを使用できません。ある種のオプション オブジェクトを必要とするすべてのコマンドについても同じことが言えます。

私が解決した唯一の回避策は、Cocoa または objc-appscript から呼び出されたネイティブ Applescript を使用してドキュメントを開き、documents配列を解析して、開いたばかりのものを探すことです。これは理想的ではありませんが、スクリプト ブリッジでもありません。アプリケーション開発者は、OSA フレームワークにネイティブではない非常に特殊な方法でスクリプト API を作成する必要があるからです。

于 2011-01-21T14:45:55.000 に答える
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"];
于 2011-01-21T15:26:57.060 に答える
0

Appscript を検討してください。 http://appscript.sourceforge.net/

これを使用したコードは次のとおりです。

APApplication *adobePhotoshopCs4 = [APApplication applicationWithName: @"Adobe Photoshop CS4"]; id 結果 = [[adobePhotoshopCs4 open_] send];

(注意してください、私は Cocoa プログラマーではありません - 私は主に Python で Appscript を使用しますが、Appscript には ASTranslate が付属しており、これは Applescript を Python、Ruby、または Obj-C に変換し、それが出力です - しかし、私は過去に微妙な間違いがあることを発見しました時には翻訳者と一緒に)

于 2011-01-21T17:24:26.897 に答える