如果窗口的所有者是通过WindowInteropHelper设置的,如何获取窗口的所有者?

问题描述 投票:0回答:1

我有一个父窗口,其所有者是通过 WindowInteropHelper 设置的。 在这种情况下,Parent.Owner 等于 null。 有什么方法可以获取拥有该窗口的窗体的句柄吗?

我需要这个用于对话框窗口。当我尝试将关闭的对话框窗口设置为所有者时,出现异常。 因此我想将对话框的所有者设置为另一个对话框的所有者。但它是 WinForm 且 DialogWindow.Owner 等于 null。

WinForm(通过 WindowInteropHelper-> WPF 父对话框(关闭)-> WPF 子对话框

c# wpf
1个回答
5
投票

要获取拥有特定 WPF 窗口的 WinForms 表单的句柄,您可以使用以下代码:

IntPtr ownerFormHandle = new WindowInteropHelper(wpfWindow).Owner

要获取拥有特定窗口(WinForms 或 WPF)的任何窗口(WinForms 或 WPF)的句柄,您可以使用以下代码:

IntPtr ownerHandle = WinAPI.GetWindow(handle, WinAPI.GW_OWNER);
//...
public static class WinAPI {
    public const uint GW_OWNER = 4;
    [System.Runtime.InteropServices.DllImport("User32.dll")]
    public static extern IntPtr GetWindow(IntPtr hWnd, uint uCmd);
}
© www.soinside.com 2019 - 2024. All rights reserved.