如何获取Window实例的hWnd?

时间:2012-05-20 16:48:56

标签: c# wpf

我的WPF应用程序有多个窗口,我需要能够获取每个Window实例的hWnd,以便我可以在Win32 API调用中使用它们。

我想做的例子:

Window myCurrentWindow = Window.GetWindow(this);
IntPtr myhWnd = myCurrentWindow.hWnd; // Except this property doesn't exist.

最好的方法是什么?

2 个答案:

答案 0 :(得分:66)

WindowInteropHelper是你的朋友。它有一个接受Window参数的构造函数,以及一个返回其窗口句柄的Handle属性。

Window window = Window.GetWindow(this);
var wih = new WindowInteropHelper(window);
IntPtr hWnd = wih.Handle;

答案 1 :(得分:12)

根据道格拉斯的回答,如果Window尚未显示,则可能没有HWND。您可以在使用EnsureHandle()

显示窗口之前强制创建一个
var window = Window.GetWindow(element);

IntPtr hWnd = new WindowInteropHelper(window).EnsureHandle();

请注意,Window.GeWindow可以返回null,因此您也应该对此进行测试。