Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cette rubrique vous montre comment, dans une application de bureau, récupérer la poignée d'une fenêtre. L’étendue couvre les applications WinUI 3, Windows Presentation Foundation (WPF) et Windows Forms (WinForms) ; Des exemples de code sont présentés en C# et C++/WinRT.
Les frameworks de développement et d’interface utilisateur répertoriés ci-dessus sont (en arrière-plan) basés sur l’API Win32. Dans Win32, un objet fenêtre est identifié par une valeur appelée handle de fenêtre. Et le type d’une poignée de fenêtre est un HWND (bien qu’il s’affiche en C# comme un IntPtr). Dans tous les cas, vous allez entendre le terme HWND utilisé comme raccourci pour handle de fenêtre.
Il existe plusieurs raisons de récupérer le HWND pour une fenêtre dans votre application de bureau WinUI 3, WPF ou WinForms. L’un des exemples consiste à utiliser le HWND pour interagir avec certains objets Windows Runtime (WinRT) qui dépendent d’un CoreWindow pour afficher une interface utilisateur (UI). Pour plus d’informations, consultez Afficher les objets d’interface utilisateur WinRT qui dépendent de CoreWindow.
WinUI 3 avec C#
Le code C# ci-dessous montre comment récupérer le handle de fenêtre (HWND) pour un objet Window WinUI 3. Cet exemple appelle la méthode GetWindowHandle sur la classe d’interopérabilité C# WinRT.Interop.WindowNative . Pour plus d’informations sur les classes d’interopérabilité C#, consultez Les API d’interopérabilité d’appel à partir d’une application .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 avec C++
Le code C++/WinRT ci-dessous montre comment récupérer le handle de fenêtre (HWND) pour un objet Window WinUI 3. Cet exemple appelle la méthode 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 avec C#
Le code C# ci-dessous montre comment récupérer le handle de fenêtre (HWND) pour un objet de fenêtre WPF. Cet exemple utilise la 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 avec C#
Le code C# ci-dessous montre comment récupérer le handle de fenêtre (HWND) pour un objet de formulaire WinForms. Cet exemple utilise la propriété NativeWindow.Handle .
// Form1.cs
private void button1_Click(object sender, EventArgs e)
{
var hWnd = this.Handle;
}
Détermination de la fenêtre qui héberge un élément visuel
À partir d’un élément visuel, vous pouvez accéder à UIElement.XamlRoot ; puis XamlRoot.ContentIslandEnvironment ; la propriété ContentIslandEnvironment.AppWindowId contient ensuite l’ID du HWND Win32 de niveau supérieur.
Rubriques connexes
Windows developer