1

私は Carbon LSUIElement アプリケーションを持っています。これはバックグラウンドで実行され (環境設定によっては、メニューバーにアイコンが表示される可能性があります)、ユーザーにダイアログを表示する必要がある場合があります。ユーザー イベントに応答する場合もありますが、バックグラウンド タスクの失敗など。

(私は Qt 4.5 を使用しているため、アプリケーションは Carbon ベースです。Qt 4.6 では Cocoa ベースになりますが、そこにも問題があるように思えます)。

問題は、ウィンドウを開いて表示すると、前面に表示されないことです。これは LSUIElement アプリの成果だと思います。Qt は、Carbon では SelectWindow を使用し、Cocoa では [makeKeyAndOrderFront] を使用して、ウィンドウ (およびアプリ) を前面に表示します。

この問題を回避するために、ウィンドウ サーバーに直接アクセスしてみました: (最初のいくつかの手順は WindowID を取得することです。Qt-Cocoa を使用すると、NSWindow:nativeWindow を使用できるため、これはより簡単になります)

WindowRef ref = HIViewGetWindow((HIViewRef) aWidget->winId());
CGSWindow wid = GetNativeWindowFromWindowRef(ref);
CGSConnection cid =_CGSDefaultConnection();
CGSOrderWindow(cid, wid, 1 /* above everything */, 0 /* NULL */);

これは、一種の機能です-ウィンドウは前面に表示されますが、強調表示されたり、キーボードがフォーカスされたりしません。これらの問題を解決するための追加の手順はありますか、または問題全体に対するより簡単な解決策はありますか?

4

2 に答える 2

1

SetFrontProcessWithOptions を使用して、ウィンドウを他のアプリの前に表示します。

于 2010-05-28T23:22:16.567 に答える
0

試す:

[NSApp activateIgnoringOtherApps: YES]
于 2011-08-03T14:49:15.363 に答える