Compartir vía


Recuperación de un identificador de ventana (HWND)

En este tema se muestra cómo, en una aplicación de escritorio, recuperar el identificador de ventana de una ventana. El ámbito abarca las aplicaciones de la Biblioteca de interfaz de usuario de Windows (WinUI) 3, Windows Presentation Foundation (WPF) y Windows Forms (WinForms); los ejemplos de código se presentan en C# y C++/WinRT.

Los marcos de trabajo de desarrollo y de interfaz de usuario enumerados anteriormente son (en segundo plano) basados en la API de Win32. En Win32, un objeto window se identifica mediante un valor conocido como identificador de ventana. Y el tipo de un identificador de ventana es un HWND (aunque aparece en C# como intPtr). En cualquier caso, escuchará el término HWND que se usa como abreviatura para el identificador de ventana.

Hay varias razones para recuperar el HWND de una ventana en la aplicación de escritorio WinUI 3, WPF o WinForms. Un ejemplo es usar el HWND para interoperar con determinados objetos de Windows Runtime (WinRT) que dependen de CoreWindow para mostrar una interfaz de usuario (UI). Para obtener más información, consulta Mostrar objetos de interfaz de usuario de WinRT que dependen de CoreWindow.

WinUI 3 con C#

El código de C# siguiente muestra cómo recuperar el identificador de ventana (HWND) para un objeto Window de WinUI 3. En este ejemplo se llama al método GetWindowHandle en la clase de interoperabilidad winRT.Interop.WindowNative de C#. Para obtener más información sobre las clases de interoperabilidad de C#, consulte Llamada a las API de interoperabilidad desde una aplicación .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 con C++

El código de C++/WinRT siguiente muestra cómo recuperar el identificador de ventana (HWND) para un objeto Window de WinUI 3. En este ejemplo se llama al 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 con C#

El código de C# siguiente muestra cómo recuperar el identificador de ventana (HWND) para un objeto de ventana de WPF. En este ejemplo se usa la clase 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 con C#

El código de C# siguiente muestra cómo recuperar el identificador de ventana (HWND) de un objeto de formulario WinForms. En este ejemplo se usa la propiedad NativeWindow.Handle .

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