Recuperar um identificador de janela (HWND)

Este tópico mostra como, em um aplicativo da área de trabalho, recuperar o identificador de janela de uma janela. O escopo abrange aplicativos da WinUI (Biblioteca de Interface do Usuário do Windows) 3, Windows Presentation Foundation (WPF) e Windows Forms (WinForms). Exemplos de código são apresentados em C# e C++/WinRT.

As estruturas de desenvolvimento e interface do usuário listadas acima são (nos bastidores) criadas na API do Win32. No Win32, um objeto de janela é identificado por um valor conhecido como identificador de janela. E o tipo de um identificador de janela é um HWND (embora ele seja exibido em C# como um IntPtr). De qualquer forma, você ouvirá o termo HWND usado como uma abreviação para o identificador de janela.

Há vários motivos para recuperar o HWND para uma janela em seu aplicativo de área de trabalho WinUI 3, WPF ou WinForms. Um exemplo é usar o HWND para interoperar com determinados objetos de Windows Runtime (WinRT) que dependem de um CoreWindow para exibir uma interface do usuário ( interface do usuário). Para obter mais informações, consulte Exibir objetos de interface do usuário do WinRT que dependem do CoreWindow.

WinUI 3 com C#

O código C# abaixo mostra como recuperar o identificador de janela (HWND) para um objeto WinUI 3 Window . Este exemplo chama o método GetWindowHandle na classe de interoperabilidade WinRT.Interop.WindowNative C#. Para obter mais informações sobre as classes de interoperabilidade do C#, consulte Chamar APIs de interoperabilidade de um aplicativo .NET.

// MainWindow.xaml.cs
private async void myButton_Click(object sender, RoutedEventArgs e)
{
    // Retrieve the window handle (HWND) of the current WinUI 3 window.
    var hWnd = WinRT.Interop.WindowNative.GetWindowHandle(this);
}

WinUI 3 com C++

O código C++/WinRT abaixo mostra como recuperar o identificador de janela (HWND) para um objeto Windows WinUI 3. Este exemplo chama o método IWindowNative::get_WindowHandle .

// pch.h
...
#include <microsoft.ui.xaml.window.h>

// MainWindow.xaml.cpp
void MainWindow::myButton_Click(IInspectable const&, RoutedEventArgs const&)
{
    // Retrieve the window handle (HWND) of the current WinUI 3 window.
    auto windowNative{ this->m_inner.as<::IWindowNative>() };
    HWND hWnd{ 0 };
    windowNative->get_WindowHandle(&hWnd);
}

WPF com C#

O código C# abaixo mostra como recuperar o identificador de janela (HWND) para um objeto de janela do WPF. Este exemplo usa a classe WindowInteropHelper .

// MainWindow.xaml.cs
private void Button_Click(object sender, RoutedEventArgs e)
{
    var wih = new System.Windows.Interop.WindowInteropHelper(this);
    var hWnd = wih.Handle;
}

WinForms com C#

O código C# abaixo mostra como recuperar o identificador de janela (HWND) para um objeto de formulário WinForms. Este exemplo usa a propriedade NativeWindow.Handle .

// Form1.cs
private void button1_Click(object sender, EventArgs e)
{
    var hWnd = this.Handle;
}