在我的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 };
}