2

私が書いているアプリケーションでは、他のいくつかのアプリケーションの項目にアクセスする必要がありますが、そのためには Applescript が最適な方法と思われます。私は Appscript フレームワークを使用してきましたが、うまく機能しました。なぜなら、それをスレッド化することができ、Applescript に時間がかかっているときにアプリがロックアップしないようにするためです。ただし、現在、アプリケーションを 64 ビット互換にしようとしていますが、Appscript フレームワークが 64 ビットをサポートしていないようです。Cocoa で Applescript を使用して、アプリケーションをロックせずに必要な完全な制御を行う「良い」方法はありますか?

--firen

4

3 に答える 3

6

うまくいくようですSBApplicationが、私は以前に使用したことがありません。

@cocoadevcentralによると:

SBApplication: AppleScript の代わりに Objective-C を使用してクロスアプリケーション スクリプト呼び出しを行うために使用します。例: 現在の iTunes トラックを取得します。

ドキュメントからの抜粋は次のとおりです。

SBApplication クラスは、Objective-C プログラムが Apple イベントをスクリプト可能なアプリケーションに送信し、それに応じて Apple イベントを受信できるようにするメカニズムを提供します。これにより、そのプログラムがアプリケーションを制御し、データを交換できるようになります。Scripting Bridge は、Apple イベント記述子と Cocoa オブジェクトの間でデータ型を橋渡しすることによって機能します。

SBApplication には Apple イベントを手動で送信および処理するメソッドが含まれていますが、これらのメソッドを直接呼び出す必要はありません。代わりに、SBApplication のサブクラスは、Apple イベントの送信を自動的に処理するアプリケーション固有のメソッドを実装します。

たとえば、現在の iTunes トラックを取得したい場合は、iTunes アプリケーション用に動的に定義されたサブクラスの currentTrack メソッドを使用するだけで済みます。このメソッドは、Apple イベントの送信の詳細を処理します。より複雑なことを理解する必要はありません。低レベルの代替:

[iTunes propertyWithCode:'pTrk'];

Apple イベントを手動で送信する必要がある場合は、NSAppleEventDescriptor クラスの使用を検討してください。

それが役立つことを願っています!

于 2009-06-12T22:55:51.660 に答える
2

Blaenk が述べたように、Scripting Bridge は最適な方法かもしれませんが、大きな配列などを繰り返し処理する必要がある場合は、多少非効率的であることがわかります。

Cocoa で Applescript を実行する最も簡単な方法は、NSAppleScript を使用することです。

Apple には非常に良い例がいくつかあります。これは、私が似たようなことをする必要があるときに役立つことがわかりました。ぜひ参考にしていただきたい記事が3つあります。それらにはすべてサンプルコードが含まれており、私はいつも非常に便利だと思っています。

  • Scripting Bridge の使用例
  • Scripting Bridge によるパフォーマンスと最適化
  • NSAppleScript テクニカルノート/例

私は複数のリンクを投稿できないため、完全な URL を含む要旨を作成しました。

http://gist.github.com/130146

于 2009-06-15T14:52:58.980 に答える
1

Appscript フレームワークは 64 ビットをサポートしていないようです。

動作するはずです。Xcode プロジェクトで正しいアーキテクチャと SDK (64 ビットには 10.5 が必要) を設定していることを確認してください。特定の問題がある場合は、バグ レポートを提出してください。

于 2009-07-10T14:58:27.150 に答える