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 wordt uitgelegd hoe u in een desktop-app de vensterhandle voor een venster kunt ophalen. Het bereik omvat WinUI 3-, Windows Presentation Foundation-apps (WPF) en Windows Forms -apps (WinForms; 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 3-, WPF- of WinForms-bureaublad-app. Een voorbeeld is het gebruik van de HWND om te werken met bepaalde Windows Runtime-objecten (WinRT) 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 3 met C#
De onderstaande C#-code laat zien hoe u de venstergreep (HWND) voor een WinUI 3 Window-object ophaalt. In dit voorbeeld wordt de methode GetWindowHandle aangeroepen voor de interopklasse WinRT.Interop.WindowNative C# . Zie Interop-API's aanroepen vanuit een .NET-app voor meer informatie over de C#-interop-klassen.
// 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 met C++
De onderstaande C++/WinRT-code laat zien hoe u de venstergreep (HWND) voor een WinUI 3-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 3 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 hebt u toegang tot UIElement.XamlRoot; dan XamlRoot.ContentIslandEnvironment; vervolgens bevat de eigenschap ContentIslandEnvironment.AppWindowId de id van de Win32 HWND op het hoogste niveau.
Verwante onderwerpen
- WinRT UI-objecten weergeven die afhankelijk zijn van CoreWindow
- interop-API's aanroepen vanuit een .NET-app
- WinUI 3
- Windows Presentation Foundation (WPF)
- Windows Forms (WinForms)
- C++/WinRT
- Win32-API
Windows developer