Подтвердить что ты не робот

Как получить экземпляр hWnd экземпляра Window?

В моем приложении WPF есть несколько окон, мне нужно получить hWnd каждого экземпляра окна, чтобы я мог использовать их в вызовах API Win32.

Пример того, что я хотел бы сделать:

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

Какой лучший способ сделать это?

4b9b3361

Ответ 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, поэтому вы тоже должны это проверить.