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 Windows UI Library (WinUI) 3, Windows Presentation Foundation (WPF) und Windows Forms -Apps (WinForms). Codebeispiele werden in C# und C++/WinRT vorgestellt.
Die oben aufgeführten Entwicklungs- und Benutzeroberflächenframeworks basieren (im Hintergrund) auf der Win32-API. In Win32 wird ein Fensterobjekt durch einen Wert identifiziert, der als Fensterhandle bezeichnet wird. Und der Typ eines Fensterziehpunkts ist ein HWND (obwohl er in C# als IntPtr angezeigt wird). In jedem Fall hören Sie den Begriff HWND , der als Kurzform 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, um mit bestimmten Windows-Runtime -Objekten (WinRT) zu interagieren, die von einem CoreWindow abhängig sind, um eine Benutzeroberfläche (UI) anzuzeigen. Weitere Informationen finden Sie unter Anzeigen von WinRT-UI-Objekten, die von CoreWindow abhängen.
WinUI 3 mit C#
Der folgende C#-Code zeigt, wie Sie das Fensterhandle (HWND) für ein WinUI 3 Window-Objekt abrufen. In diesem Beispiel wird die GetWindowHandle-Methode für die WinRT.Interop.WindowNative C#-Interop-Klasse aufgerufen. Weitere Informationen zu den C#-Interopklassen 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 Sie das Fensterhandle (HWND) für ein WinUI 3 Window-Objekt abrufen. 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 Sie das Fensterhandle (HWND) für ein WPF-Fensterobjekt abrufen. 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 Sie das Fensterhandle (HWND) für ein WinForms-Formularobjekt abrufen. In diesem Beispiel wird die NativeWindow.Handle-Eigenschaft verwendet.
// Form1.cs
private void button1_Click(object sender, EventArgs e)
{
var hWnd = this.Handle;
}
Zugehörige Themen
Windows developer
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für