4

プロトコル ハンドラでもある Mac OS X アプリケーションがあります (たとえば、Safari が HTTP および HTTPS プロトコルのプロトコル ハンドラであるように)。したがって、ユーザーが任意のアプリケーションで myscheme://some-kind-of-info という形式のリンクをクリックすると、アプリケーションが起動してリンクを処理します。

ここで、アプリケーションがそのようなリンク クリックによって起動されたのか、それとも他の方法で起動されたのかを判断できるようにする必要があります。つまり、リンククリック以外の方法で起動されたということです。(そのような場合、アプリを開いたままにしておきたいのですが、リンクによって起動された場合は終了してリンクを無視する必要があります。この方法では、既に実行されている場合にのみ動作します。)

起動時にアプリ内で調べて、AppleScript GetURL イベントではなく標準メソッドによって起動されたことを確認する方法はありますか? たとえば、アプリが 0.5 秒間実行された後にのみこれらのリンクを開くようにするのではなく、文書化された方法で調べたいと思います。

4

1 に答える 1

4

起動時に受け取る可能性のある Apple イベントごとにハンドラーを登録し、最初に受け取るものをメモしておくことができます。

  • ドキュメントなしでアプリケーションを起動すると、kAEOpenApplication.
  • ドキュメントで起動した場合は、kAEOpenDocuments(または kAEPrintDocuments) が表示されます。
  • URL で起動すると、(明らかに) が表示されますkAEGetURL

もありますkAEOpenContentsが、テストアプリでは簡単にトリガーできませんでした。何があってもサポートする価値はあります。

How Cocoa Applications Handle Apple Eventsは、これらすべてを文書化しています。

ただし、エラーが 1 つあります。AppleScriptの「起動」が送信されると書かれていますkAEOpenApplication。そうではなく、ascr/noop( kASAppleScriptSuite/kASLaunchEventで定義されたASRegistry.h) を送信します。このイベントをトラップするための通常の Cocoa イベント ハンドラー メカニズムを取得できませんでした。

起動時にイベントが送信されたかどうかを確認する方法の 1 つは、アプリケーション デリゲートのapplicationWillFinishLaunching:メソッドにイベント ハンドラーを登録することです。applicationDidFinishLaunching:が呼び出されるまでに配信する必要があります。その方法では、潜在的にのみをチェックできますkAEGetURL

于 2011-04-28T01:46:12.293 に答える