Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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.
Verwante onderwerpen
Windows developer