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 (Windows Presentation Foundation)) a model 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 (Windows Presentation Foundation) nebo WinForms. Jedním z příkladů je použití HWND pro spolupráci s určitými objekty prostředí 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 (Windows Presentation Foundation) s jazykem C#
Níže uvedený kód jazyka C# ukazuje, jak načíst popisovač okna (HWND) pro objekt okna WPF (Windows Presentation Foundation). 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