18

このアプリを使用して、アプリ内から他のアプリのメニュー項目(Print cmd + pなど)をアクティブ化する必要があります。現在、CGEventPostToPSN()を使用してジョブを実行しており、正常に機能しますが、サンドボックスをアクティブにすると、機能しなくなります。

CGEventPostToPSN(&psn, keyDownEvent);
CFRelease(keyDownEvent);
CGEventPostToPSN(&psn, keyUpEvent);
CFRelease(keyUpEvent);

私の質問は、サンドボックスを有効にする必要があるときに何ができるかということです。Accessibility APIについて多くのことを聞きましたが、他のアプリのメニュー項目をアクティブ化する方法を見つけることができませんでした。この問題についての回答に感謝します。

ファビアン

4

2 に答える 2

4

サンドボックス環境でも、AppleEventを別のアプリケーションに送信できます。アプリの「AppleEventTemporaryException」を申請するだけです。これについては、「Apple EventTemporaryException」のセクションにあるAppleのElementKeyReferenceで詳しく説明されいます。

Apple Event Temporary Exception
App Sandboxを採用すると、アプリは次の機能を保持します。
●Appleイベントを受信する
●Appleイベントを自分自身に送信する●受信したApple
イベントに応答する
ただし、App Sandboxでは、構成しない限り、Appleイベントを他のアプリに送信することはできません。アップルイベントの一時的な例外の資格。

Appleイベントを送信するアプリごとに、このエンタイトルメントキーの値配列の文字列値として、アプリのバンドル識別子をすべて小文字で指定します。たとえば、アプリからiPhotoへのAppleイベントの送信を有効にするには、文字列値com.apple.iphotoを使用します。

エンタイトルメントキー機能
com.apple.security.temporary-exception.apple-events1つ以上の宛先アプリへのAppleイベントの送信を有効にします。

私の知る限り、Appleはこの文脈で「一時的」を明示的に定義していませんが、Appleは今のところこれを許可していますが、将来のアプリストアまたはMacOSXアップデートによってこれを行う機能が削除される可能性があるというコンセンサスがあります。

イベントを送信できるようにする必要があるアプリを事前に明示的に指定する必要があることに注意してください。これは、アプリまたはユーザーが実行時に動的に選択することはできません。

于 2011-11-20T04:07:46.340 に答える
2

この質問に対する最終的な答えはまだありませんが、@nielsbotによって提案されたAccessibilityAPIで可能になるようです。

とのようないくつかの有望な関数がAXUIElementPostKeyboardEvent()ありAXUIElementPerformAction()ます。問題:Appleのサンドボックスガイドラインでは、AccessibilityAPIを使用して別のアプリを制御することは禁止されています。

注:App Sandboxを使用すると、このドキュメントで説明されているように、アプリのユーザー補助機能を有効にすることができます。ただし、スクリーンリーダーなどの補助アプリをサンドボックス化することはできません。また、別のアプリを制御するアプリをサンドボックス化することもできません。

あなたがこの質問に出くわし、私と同じ問題を抱えているなら、私はあなたが運が悪いのではないかと心配しています。本当に別のアプリを制御する必要があるかどうかを再検討してください。そうすると、MacAppStoreでアプリを配布できない可能性があります。申し訳ありません。

ファビアン

于 2012-09-04T07:40:14.540 に答える