2009-03-20 21 views
2

私はCocoa/Objective Cアプリケーションを開発しています。これは、AppScriptを使ってどのアプリケーションからでもアクティブな文書を読み込みます。私はこの部分をうまくやったことがありますが、アプリケーションが文書ベースであるかどうかを確実に伝えることができれば本当に良いでしょう。アプリケーションがドキュメントベースであるかどうかを検出するにはどうすればよいですか?

明白なアプローチは、アプリケーション内のアクティブなウィンドウのAXDocument属性を調べ、パスが含まれている場合、アプリケーションがドキュメントベースであることを認識しています。ただし、文書が保存されていない場合、これは機能しません。それもかなり不器用です。 AXDocument属性は非ドキュメントアプリケーションに表示される可能性があるため、存在または不在を使用して私が求める情報を提供することはできません。

AppleScriptで公開されている他のプロパティと属性を、アプリケーションプロセスと単一のウィンドウの両方で調べてみました。これらの項目のどれも、アプリがドキュメントベースであるかどうかを私に教えてくれないようです。

また、いくつかのInfo.plistファイルを調べてみましたが、確実にこれを示すものは表示されません。私はちょうど十分に見張っていないのですか?またはObjective CまたはAppleScriptでこれを行う良い方法はありますか?

答えて

2

Document-Based Application Architectureガイドに従って作成されたドキュメントベースのアプリケーションは、いくつかの条件を満たす必要があります。 Mac OSのさまざまなアプリケーションにアクセスできるかどうかはわかりませんが、(Objective-Cでは)NSDocumentサブクラスの存在をテストできます。 もう一つのアイデアはメニュー項目を見てみることです...ファイル - >新規、ファイル - >メニュー項目を開く?

+0

感謝を。申し訳ありませんが、私はあなたの答えを評価するのに遅れていました - 回答が投稿されたときに私は電子メールで通知されると思っていましたが、これは起こりませんでした。私はメニュー項目をチェックすることがこれまでの最善のアイデアだと思う。ご回答有難うございます。 –

1

アプリケーションバンドルのInfo.plistでCFBundleDocumentTypesキーを探したい場合があります。これは、通常、ドキュメントベースのアプリケーションのために存在します。そのため、ドキュメントタイプは、エクステンションとそれをロードするクラスの両方に関連付けることができます。

+0

残念ながら、私が非ドキュメントとして分類するアプリケーションのいくつかは、Appleの定義のドキュメントアプリです。たとえば、iCalを非ドキュメントとして分類します.iCalドキュメントを作成することはできません。しかしAppleはそれを.icsファイルを開くことができると見ている。だから私はこのテクニックを使用することはできませんが、提案に感謝します。 –

+0

この場合、拡張子のNSDocumentClassエントリはおそらく空です。これはiCalsの場合です。 –

1

もう1つのアイデアは、タイトルバーのプロキシアイコンを表すAXImageを探すことです。無題の文書は、ウインドウタイトルを「無題」またはそのローカライズされたものと照合することによって簡単に一致させることができます。

(一部のアプリがさえ無題のドキュメントのプロキシのアイコンが含まれませんが、多くはそうではない。)応答のための

+0

ああ。非常に興味深い考え。ありがとう。 –

関連する問題