私のwinformsアプリケーションでは、メインウィンドウハンドルを取得しようとしているので、wpfモーダルウィンドウの親として設定できます。私はwinformの経験があまりないので、少しグーグルで調べたところ、2つの方法で入手できました。
System.Windows.Forms.Application.OpenForms[0].Handle
System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle
(1) は常に正しいと思われる同じ値を返すように見えます (少なくとも私のモーダル ウィンドウは期待どおりに動作します)、(2) は (1) と同じ値を返すこともありますが、まったく異なるポインターを返すこともあります。動作していないようです (私のモーダル ウィンドウは、親ウィンドウだけでなく、他のすべてのウィンドウの上に表示されます)。
誰かが2つの方法の違いを説明できますか? 時々異なる結果を返すのは正常ですか?
編集:
他の誰かが疑問に思っている場合: ハンドルを取得したら、WindowInteropHelper
クラスを作成して使用できます。
public static void SetInteropParent(this Window wpfDialogWindow, IntPtr winformsParentHandle)
{
new WindowInteropHelper(wpdDialogWindow) { Owner = winformsParentHandle };
}