Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V tomto tématu se dozvíte, jak v desktopové aplikaci získat popisovač okna. Rozsah se týká WinUI 3, Příklady kódu Windows Presentation Foundation (WPF) a Windows Forms (WinForms) apps; jsou uvedeny v 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 ve vaší desktopové aplikaci WinUI, 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 objektech 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 s jazykem C#
Níže uvedený kód jazyka C# ukazuje, jak načíst popisovač okna (HWND) pro objekt Okna WinUI. 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 Volit 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 window.
var hWnd = WinRT.Interop.WindowNative.GetWindowHandle(this);
}
WinUI s C++
Níže uvedený kód C++/WinRT ukazuje, jak načíst popisovač okna (HWND) pro objekt WinUI Window. 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 window.
auto windowNative{ this->m_inner.as<::IWindowNative>() };
HWND hWnd{ 0 };
windowNative->get_WindowHandle(&hWnd);
}
WPF s jazykem C#
Níže uvedený kód jazyka C# ukazuje, jak načíst 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
Chcete-li přistupovat k UIElement.XamlRoot z vizuálního prvku, pokračujte na XamlRoot.ContentIslandEnvironment a následně vlastnost ContentIslandEnvironment.AppWindowId obsahuje ID nejvyšší úrovně Win32 HWND.
Související témata
Windows developer