2011-01-20 23 views
0

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

AppleScriptはファイルを開くためにPhotoshopにメッセージを送信します。 fileパラメータはaliasとして送信されますが、ScriptingBridgeはパラメータをidとしてインポートします。私はObj-Cオブジェクトを渡すべきであるか分からない?

私はNSURLとNSString(恐らく間違って:-P)を渡そうとしましたが、役に立たなかったのです。私がファイルエイリアスのために渡すべきものに関する提案はありますか?

答えて

1

簡単な答えは、Scripting Bridgeを使用してPhotoshopでドキュメントを開くことができないことです。

アップルのドキュメントは本当にそれを綴っています。すべてのクラスは可変配列は、彼らが生成されたヘッダに示すように、彼らは、作用することができます前に追加する必要があること、であるコンテナ、...

@interface photoshopCS4Application : SBApplication 

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

を持っている必要があります...それはあります私たちが利用できるトップレベルコンテナの完全なリスト。 openコマンドは、photoshopCS4OpenOptionsを生成して入力する必要があります。 APIは、新しく作成されたphotoshopCS4OpenOptionsオブジェクトを格納するために配列を公開しないため、新しく作成されたphotoshopCS4OpenOptionsオブジェクトを使用することはできません。したがって、ターゲットドキュメントを作成することはできず、拡張機能はScripting Bridgeでopenコマンドを使用できません。何らかのオプションオブジェクトを必要とするすべてのコマンドについても同じことが言えます。

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

1

プログラムはPhotoshopドキュメントを開くと、あなたのAppleScriptスクリプト/スクリプティングブリッジコード外で実行することができるようになっている場合は、ココアは、特定のアプリケーションでファイルを開くための方法を提供します。

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

か、あなたがしたい場合そのファイルタイプを処理する既定のアプリケーションを使用するには、アプリケーション名をすべて削除します。

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

私が提案した方法よりもクールな方法は間違いありません。注意しなければならないのは、OPが正常に開かれた場合、オープンしたばかりのものを探すためにOPがまだ 'ドキュメント'配列を通過しなければならないということです。 –

0

Appscriptを検討してください。

APApplication * adobePhotoshopCs4 = [APApplication applicationWithName: "Adobe PhotoshopのCS4" @] http://appscript.sourceforge.net/

はここでそれを使用してコードです。 id result = [[adobePhotoshopCs4 open_] send];

(私はココアのプログラマーではない - 私は主にPythonでAppscriptを使うが、AppscriptにはApplescriptをPython、Ruby、Obj-Cに変換するASTranslateが付属しているが、それは出力だが、翻訳者と過去に間違いがあった場合もあります)

関連する問題