我的WPF应用程序有多个窗口,我需要能够获取每个Window实例的hWnd,以便我可以在Win32 API调用中使用它们。
我想做的例子:
Window myCurrentWindow = Window.GetWindow(this);
IntPtr myhWnd = myCurrentWindow.hWnd; // Except this property doesn't exist.
最好的方法是什么?
答案 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
,因此您也应该对此进行测试。