1

私は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を介して起動されます。

4

2 に答える 2

1

C アプリを変更できますか? その場合は、C アプリ ウィンドウ ハンドルでSetForegroundWindowを呼び出します。または、C アプリ ウィンドウ ハンドルへの参照を取得できる場合は、C# アプリからこの呼び出しを行うこともできます。

于 2012-11-21T19:54:46.330 に答える
0

使用しているオペレーティング システムについては言及されていませんでしたが、検索の結果、SetForegroundWindow が Windows 7 で常に動作するとは限らないことがわかりました。回避策については、こちらを参照してください。おそらく、そこからいくつかのアイデアを取り出して、C または C# アプリのいずれかに適用して、実用的なソリューションを得ることができますか?

于 2012-11-21T20:17:24.537 に答える