C++ レガシ アプリケーションがあり、親の C++ アプリから COM を使用して呼び出される C# アプレットでそれを拡張しています。モーダルではないウィンドウが表示されます。さらに、これらの .NET ウィンドウは C++ アプリケーションの適切な子ではないと思います。なぜなら、EnumChildWindows はそれらを見逃し、EnumWindows はそれらを見つけるからです。ただし、親の C++ アプリを閉じると、c# ウィンドウも閉じるという点で、子供のような動作が 1 つあります。
これらすべてに関する私の基本的な問題は、ユーザーがこれらの c# アプレットのいずれかを呼び出してから、誤って親 (c++) アプリ ウィンドウをクリックすると、c# ウィンドウがバックグラウンドに落ちることです。ユーザーがこれを一番上に戻したい場合は、タスクバーのアイコンをクリックするだけでよいはずです。残念ながら、奇妙な理由で、タスクバーのアイコンを3 回クリックしなければならないことがよくあります。最初は非表示のウィンドウが一番上に表示されるはずですが、そうではありません。2 回目のクリックで非表示のウィンドウが最小化され、3 回目のクリックで正常に復元されます。
レガシーから .NET への分割を橋渡しするときに、このバグ/機能に出くわした人はいますか? C# アプレットのタスクバー アイコンの最初のクリックを傍受し、どうにかしてトップに戻るように強制できるかどうか疑問に思っています。:-)
私は次のことを実験してきました:
[DllImport("User32.dll")]
private static extern int ShowWindow(IntPtr hwnd, IntPtr nCmdShow);
しかし、これが機能したとしても、最初のマウスクリックをインターセプトする必要があります。ご協力いただきありがとうございます!