2

このアプリケーションは、プラグインによって起動および処理される (ドック アイコンを持つことはできません) ためLSUIElement、ステータスを維持する必要があるアプリケーションがあります。LSUIElement

アプリを「通常の」アプリ(なしLSUIElement)に変更すると、[NSApp activateIgnoringOtherApps:YES]完全に機能します。ただしLSUIElement、ウィンドウを表示するとウィンドウが表示されますが、ウィンドウはサファリ (プラグインが実行されている場所) の後ろにスタックしていますが、他のすべての上にあります。呼ん-[NSWindow makeKeyAndOrderFront:self];でいますが、何の違いもありません。

明確にするために、プラグインとアプリケーションは 2 つの別個のプロセスであるため、「プラグイン」側は無関係です。プラグインは、(マッハ ポート経由で) イベントをアプリケーションに送信します。アプリケーションは、ウィンドウを開いてフォーカスを合わせるコードを呼び出します。問題は、それをフォーカスするコードが、LSUIElementアプリケーションでない場合にのみ機能することです。

私はこれを機能させるために既存の呼び出しを徹底的に検索しました.マウスクリックを偽造する方法についての提案を受け入れるか、これを機能させるためにアップルスクリプトを実行することさえできます.

LSUIElement「アプリケーションはドックに表示されず、メニューバーもありませんが、プログラムでアクティブ化される可能性があります」という状態のAppleドキュメントですが、これを可能にする魔法が見つかりません。

4

2 に答える 2

0

アプリケーション全体がCocoaを使用している場合でも、「LSUIElement」が「1」に設定されているアプリでは、次のアプローチが機能します。

ProcessSerialNumber psn;
if (noErr == GetCurrentProcess(&psn))
{
    (OSStatus)SetFrontProcess(&psn);
}

(これは Carbon API の一部です。)

于 2012-06-25T07:27:49.093 に答える