0

別のソフトウェアのプログラム ファイルの更新を実行し、このソフトウェアを起動する小さなアプリケーションを構築しています。アプリケーションの起動後、スプラッシュ ウィンドウが 2 番目の GUI スレッドに表示され、メイン スレッドでは 2 番目のアプリケーションのメイン ウィンドウが構築されて表示されます。

var shell = (Shell) Shell;
Application.Current.MainWindow = shell;
shell.Show();

2 番目のアプリのシェルが表示された後、最初のウィンドウが閉じられます。2 番目のウィンドウのシェルが* 他のウィンドウの下に表示されることを除けば、すべて正常に動作しています。つまり、エクスプローラーからランチャー アプリを起動すると、ランチャー ウィンドウがエクスプローラー ウィンドウの上に表示されます。ランチャー ウィンドウが閉じ、メイン アプリ ウィンドウがエクスプローラー ウィンドウの下に表示されます。

私はもう試した:

var shell = (Shell) Shell;
Application.Current.MainWindow = shell;
shell.Topmost = true;
shell.Show();
shell.InjectInitialViews();

これでこの問題は解決しますが、タスク バーで別のアプリをクリックしても、シェルの上に他のウィンドウを表示できません。

var shell = (Shell) Shell;
Application.Current.MainWindow = shell;
shell.Topmost = true;
shell.Show();
shell.InjectInitialViews();
shell.Topmost = false;

何もしません...これを達成する適切な方法は何ですか?

4

3 に答える 3

1

私の記憶が正しければ、次のようにして、外部ランチャーを使用して WPF スマート クライアントでこの問題を解決しました。

  1. メイン アプリケーションの起動後、ランチャーはAllowSetForegroundWindowP/Invoke を介して呼び出し、メイン アプリケーションがフォアグラウンド ウィンドウを設定できるようにします (これは、ランチャーがアクティブな場合に許可されます)。

  2. メイン アプリケーションはSetForegroundWindowP/Invoke を介して呼び出し、フォアグラウンド ウィンドウをメイン シェル ウィンドウに設定します。

...またはそれらの線に沿った何か。SetForegroundWindowアプリのメイン ウィンドウがアクティブになるのを待ってから呼び出したのは、ランチャーだった可能性があります。これはしばらく前のことで、ソースにアクセスできなくなりました。

于 2013-11-11T13:52:42.790 に答える