私はCLegacyアプリを持っていますが、このアプリは時間の経過とともにウィンドウを開いたり閉じたりします(サーバーアプリです)。
同じマシンで、C#のwinformsアプリを実行しています。
これが私の目標です。私のC#アプリは私のCアプリにwin32メッセージを送信します。Cアプリがウィンドウを開きます。新しく開いたCウィンドウを、C#アプリの前面に表示したいと思います。
現在のプロセスは次のとおりです。
- C#はwin32メッセージをCに送信します
- Cが受信し、新しいウィンドウを開きます
- Cは自分自身を前進させようとします
- (この時点で、C#がCに「自分の前に自分を連れてくる」ように指示する必要があるかどうか疑問に思っています)
編集どういうわけかCウィンドウが前面に表示される部分を除いて、すべて完了しました。現在、Cアプリにメッセージを送信すると、新しいウィンドウ(同じ.exeの他のすべてのウィンドウの前)が開きますが、C#アプリの下にあります。
使ってみました
[DllImport("user32.dll")]
static extern bool AllowSetForegroundWindow(ServerWindowHandle);
しかし、それは運がなかった。どういうわけか、Cアプリに.netアプリの「所有権」を持たせる必要がありますか?C#アプリは、programinvokeを介して起動されます。