Delen via


Een venstergreep ophalen (HWND)

In dit onderwerp ziet u hoe u de window handle voor een venster in een bureaublad-app kunt ophalen. Het bereik omvat WinUI 3, Windows Presentation Foundation (WPF) en Windows Forms (WinForms)-apps; codevoorbeelden worden weergegeven in C# en C++/WinRT.

De hierboven vermelde ontwikkelings- en UI-frameworks zijn (achter de schermen) gebouwd op de Win32-API. In Win32 wordt een vensterobject geïdentificeerd door een waarde die een venstergreep wordt genoemd. En het type van een venstergreep is een HWND (hoewel het in C# als een IntPtr wordt weergegeven). In elk geval hoort u de term HWND die wordt gebruikt als afkorting voor windowhandle.

Er zijn verschillende redenen om de HWND op te halen voor een venster in uw WinUI-, WPF- of WinForms-bureaublad-app. Een voorbeeld is het gebruik van de HWND om te samenwerken met bepaalde Windows Runtime (WinRT)-objecten die afhankelijk zijn van een CoreWindow om een gebruikersinterface (UI) weer te geven. Zie WinRT UI-objecten weergeven die afhankelijk zijn van CoreWindow voor meer informatie.

WinUI met C#

De onderstaande C#-code laat zien hoe u de venstergreep (HWND) voor een WinUI-vensterobject ophaalt. In dit voorbeeld wordt de methode GetWindowHandle aangeroepen voor de interopklasse WinRT.Interop.WindowNative C# . Zie Interop-API's vanuit een .NET-app aanroepen voor meer informatie over C#-interopklassen.

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

WinUI met C++

De onderstaande C++/WinRT-code laat zien hoe u de venstergreep (HWND) voor een WinUI-vensterobject ophaalt. In dit voorbeeld wordt de methode IWindowNative::get_WindowHandle aangeroepen.

// 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 window.
    auto windowNative{ this->m_inner.as<::IWindowNative>() };
    HWND hWnd{ 0 };
    windowNative->get_WindowHandle(&hWnd);
}

WPF met C#

De onderstaande C#-code laat zien hoe u de venstergreep (HWND) voor een WPF vensterobject ophaalt. In dit voorbeeld wordt de klasse WindowInteropHelper gebruikt.

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

WinForms met C#

De onderstaande C#-code laat zien hoe u de venstergreep (HWND) voor een WinForms-formulierobject ophaalt. In dit voorbeeld wordt de eigenschap NativeWindow.Handle gebruikt.

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

Het venster bepalen dat als host fungeert voor een visueel element

Vanuit een visueel element kunt u toegang krijgen tot UIElement.XamlRoot, daarna XamlRoot.ContentIslandEnvironment, en vervolgens bevat de eigenschap ContentIslandEnvironment.AppWindowId de id van het hoogste niveau Win32 HWND.