Как получить экземпляр hWnd экземпляра Window?
В моем приложении WPF есть несколько окон, мне нужно получить hWnd каждого экземпляра окна, чтобы я мог использовать их в вызовах API Win32.
Пример того, что я хотел бы сделать:
Window myCurrentWindow = Window.GetWindow(this);
IntPtr myhWnd = myCurrentWindow.hWnd; // Except this property doesn't exist.
Какой лучший способ сделать это?
Ответы
Ответ 1
WindowInteropHelper
- ваш друг. Он имеет конструктор, который принимает параметр Window
и свойство Handle
, которое возвращает дескриптор окна.
Window window = Window.GetWindow(this);
var wih = new WindowInteropHelper(window);
IntPtr hWnd = wih.Handle;
Ответ 2
Продолжая ответ Дугласа, если Window
пока не отображается, у него может не быть HWND. Вы можете заставить его создать до появления окна с помощью EnsureHandle()
:
var window = Window.GetWindow(element);
IntPtr hWnd = new WindowInteropHelper(window).EnsureHandle();
Обратите внимание, что Window.GeWindow
может возвращать null
, поэтому вы тоже должны это проверить.