Dela via


Hämta ett fönsterhandtag (HWND)

Det här avsnittet visar hur du i en skrivbordsapp hämtar fönsterhandtaget för ett fönster. Omfånget omfattar WinUI 3-, Windows Presentation Foundation-appar (WPF) och WinForms-appar (Windows Forms). kodexempel visas i C# och C++/WinRT.

Ramverken för utveckling och användargränssnitt som anges ovan bygger (i bakgrunden) på Win32-API:et. I Win32 identifieras ett -fönster-objekt med ett värde som kallas ett -fönsterhandtag. Och typen av ett fönsterhandtag är en HWND- (även om den visas i C# som en IntPtr). I vilket fall som helst kommer du att höra termen HWND användas som en förkortning för fönsterhandtag.

Det finns flera orsaker till att hämta HWND för ett fönster i din WinUI 3-, WPF- eller WinForms-skrivbordsapp. Ett exempel är att använda HWND för att samverka med vissa WinRT-objekt (Windows Runtime) som är beroende av en CoreWindow för att visa ett användargränssnitt (UI). Mer information finns i Visa WinRT-gränssnittsobjekt som är beroende av CoreWindow.

WinUI 3 med C#

C#-koden nedan visar hur du hämtar fönsterhandtaget (HWND) för ett WinUI 3-fönsterobjekt . I det här exemplet anropas metoden GetWindowHandle i interop-klassen WinRT.Interop.WindowNative C#. Mer information om C#-interopklasserna finns i Anropa interop-API:er från en .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 med C++

C++/WinRT-koden nedan visar hur du hämtar fönsterhandtaget (HWND) för ett WinUI 3-fönsterobjekt . I det här exemplet anropas metoden 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 med C#

C#-koden nedan visar hur du hämtar fönsterhandtaget (HWND) för ett WPF-fönsterobjekt. I det här exemplet används klassen 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 med C#

C#-koden nedan visar hur du hämtar fönsterhandtaget (HWND) för ett WinForms-formulärobjekt. I det här exemplet används egenskapen NativeWindow.Handle .

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

Fastställa vilket fönster som är värd för ett visuellt element

Från ett visuellt element kan du komma åt UIElement.XamlRoot. sedan XamlRoot.ContentIslandEnvironment; sedan innehåller egenskapen ContentIslandEnvironment.AppWindowId ID:t för Win32 HWND på den översta nivån.