Abrufen eines Fensterhandles (HWND)

In diesem Thema erfahren Sie, wie Sie in einer Desktop-App das Fensterhandle für ein Fenster abrufen. Der Bereich umfasst WinUI 3-, Windows Presentation Foundation (WPF)- und Windows Forms (WinForms)-Apps. Codebeispiele werden in C# und C++/WinRT dargestellt.

Die oben aufgeführten Entwicklungs- und Benutzeroberflächenframeworks basieren (im Hintergrund) auf der Win32-API. In Win32 wird ein Fenster-Objekt durch einen Wert identifiziert, der als Fensterhandle bezeichnet wird. Und der Typ eines Fensterhandles ist ein HWND (obwohl er in C# als IntPtr angezeigt wird). In jedem Fall hören Sie den Begriff HWND, der als Abkürzung für das Fensterhandle verwendet wird.

Es gibt mehrere Gründe, den HWND für ein Fenster in Ihrer WinUI 3-, WPF- oder WinForms-Desktop-App abzurufen. Ein Beispiel ist die Verwendung des HWND für die Interoperabilität mit bestimmten Windows-Runtime-Objekten (WinRT), die von einem CoreWindow abhängen, um eine Benutzeroberfläche anzuzeigen. Weitere Informationen erhalten Sie unter Anzeigen von WinRT UI-Objekten, die von CoreWindow abhängig sind.

WinUI 3 mit C#

Der folgende C#-Code zeigt, wie das Fensterhandle (HWND) für ein WinUI 3 Window-Objekt abgerufen wird. In diesem Beispiel wird die GetWindowHandle-Methode für die WinRT.Interop.WindowNative C#-Interop-Klasse aufgerufen. Weitere Informationen zu den C#-Interop-Klassen finden Sie unter Aufrufen von Interop-APIs aus einer .NET-App.

// 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 mit C++

Der folgende C++/WinRT-Code zeigt, wie das Fensterhandle (HWND) für ein WinUI 3 Window-Objekt abgerufen wird. In diesem Beispiel wird die IWindowNative::get_WindowHandle-Methode aufgerufen.

// 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 mit C#

Der folgende C#-Code zeigt, wie das Fensterhandle (HWND) für ein WPF-Fensterobjekt abgerufen wird. In diesem Beispiel wird die WindowInteropHelper-Klasse verwendet.

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

WinForms mit C#

Der folgende C#-Code zeigt, wie das Fensterhandle (HWND) für ein WinForms-Formularobjekt abgerufen wird. In diesem Beispiel wird die NativeWindow.Handle-Eigenschaft verwendet.

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