在我的 winforms 应用程序中,我试图获得一个主窗口句柄,因此我可以将其设置为我的 wpf 模态窗口的父级。我对winforms不太熟悉,所以经过一番谷歌搜索后,我找到了两种方法来获得它。
System.Windows.Forms.Application.OpenForms[0].Handle
System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle
(1) 似乎总是返回看起来正确的相同值(至少我的模态窗口的行为符合预期),而 (2) 有时返回与 (1) 相同的值,但有时 - 一个完全不同的指针,它确实似乎不起作用(我的模式窗口出现在所有其他窗口的顶部,而不仅仅是父窗口)。
有人可以解释这两种方法之间的区别吗?有时他们返回不同的结果是否正常?
编辑:
万一其他人想知道:一旦你得到了句柄,你可以通过创建WindowInteropHelper
类来使用它:
public static void SetInteropParent(this Window wpfDialogWindow, IntPtr winformsParentHandle)
{
new WindowInteropHelper(wpdDialogWindow) { Owner = winformsParentHandle };
}