1

ユーザーが実際に閉じないアプリがあります。アプリケーション全体をシャットダウンする代わりに、メイン ウィンドウが非表示になっています。次に、ユーザーが同じアプリケーションを再度起動すると、2 番目のインスタンスが最初の (既に実行中の) インスタンスと通信し、最初のインスタンスがメイン アプリ ウィンドウを前面に表示しようとします。

問題は、これはほとんど成功しますが、失敗することもあります。私は調査を行いましたが、バックグラウンド プロセスはウィンドウをフォアグラウンドに移動できないようです。これはある程度合理的です。解決策は、2 番目のインスタンスから AllowSetForegroundWindow を呼び出し (ユーザーがウィンドウを開始したため、ウィンドウをフォアグラウンドにすることができます)、プログラムの最初のインスタンスに許可を与えることです。

私の質問は次のとおりです。コードが機能することを確認するにはどうすればよいですか? AllowSetForegroundWindow 呼び出しが効果があるかどうかを確認する方法が見つからなかったため、これを求めています。最初のインスタンスがいつフォアグラウンド ウィンドウを設定できなくなるかはわかりません (ほとんどの場合機能し、めったに機能しないため)。そのため、すべてが適切に機能しているかどうかを確認する方法がわかりません。何かアイデアはありますか?

4

1 に答える 1

2

AllowSetForegroundWindow()チェックできるリターンコードがあります:

呼び出しプロセスがフォアグラウンド ウィンドウを設定できない場合、関数は失敗します。

アプリが起動されると、フォアグラウンド ウィンドウを設定できるため、成功し、既存のアプリのインスタンスが前面に表示されるはずAllowSetForegroundWindow() です

ただし、これが常に機能することを保証する方法はありません。できることは、文書化されたシステムをできる限り実装することだけです。最悪の場合、既存のアプリが他のウィンドウの背後で開き、ユーザーはそれをクリックして前面に表示する必要があります。

于 2013-08-13T21:29:24.553 に答える