Sdílet prostřednictvím


Načtení úchytu okna (HWND)

V tomto tématu se dozvíte, jak v desktopové aplikaci načíst popisovač okna okna. Obor zahrnuje aplikace WinUI 3, Windows Presentation Foundation (WPF) a Windows Forms (WinForms). Příklady kódu jsou uvedeny v jazyce C# a C++/WinRT.

Výše uvedené architektury pro vývoj a uživatelské rozhraní jsou (na pozadí) založené na rozhraní API Win32. V systému Win32 je objekt okna identifikován hodnotou známou jako popisovač okna. A typ úchytu okna je HWND (i když se v jazyce C# zobrazuje jako IntPtr). V každém případě uslyšíte termín HWND použitý jako zkratka pro úchyt okna.

Existuje několik důvodů, proč získat HWND pro okno v desktopové aplikaci WinUI 3, WPF nebo WinForms. Jedním z příkladů je použití HWND pro spolupráci s určitými objekty Windows Runtime (WinRT), které závisí na CoreWindow k zobrazení uživatelského rozhraní . Další informace naleznete v tématu Zobrazení objektů uživatelského rozhraní WinRT, které závisí na CoreWindow.

WinUI 3 s C#

Kód jazyka C# uvedený níže ukazuje, jak získat popisovač okna (HWND) pro objekt Window ve WinUI 3. Tento příklad volá metodu GetWindowHandle na interop třídu WinRT.Interop.WindowNative C#. Další informace o třídách interoperability jazyka C# najdete v tématu Volání rozhraní API pro interoperabilitu z aplikace .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 s C++

Níže uvedený kód C++/WinRT ukazuje, jak načíst popisovač okna (HWND) pro objekt Window ve WinUI 3. Tento příklad volá IWindowNative::get_WindowHandle metoda.

// 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 s C#

Níže uvedený kód jazyka C# ukazuje, jak získat popisovač okna (HWND) pro objekt okna WPF. Tento příklad používá WindowInteropHelper třída.

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

WinForms s jazykem C#

Níže uvedený kód jazyka C# ukazuje, jak získat popisovač okna (HWND) pro objekt formuláře WinForms. Tento příklad používá NativeWindow.Handle vlastnost.

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

Určení okna, které je hostitelem vizuálního prvku

Z vizuálního prvku můžete získat přístup k UIElement.XamlRoot; pak XamlRoot.ContentIslandEnvironment; Vlastnost ContentIslandEnvironment.AppWindowId obsahuje ID systému Win32 HWND nejvyšší úrovně.