Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym temacie pokazano, jak w aplikacji desktopowej pobrać uchwyt okna. Zakres obejmuje aplikacje WinUI 3, Windows Presentation Foundation (WPF) i Windows Forms (WinForms). Przykłady kodu są prezentowane w językach C# i C++/WinRT.
Wymienione powyżej struktury programowania i interfejsu użytkownika są (w tle) oparte na interfejsie API Win32. W systemie Win32 obiekt okna jest identyfikowany przez wartość znaną jako uchwyt okna. Typ uchwytu okna to HWND (chociaż w języku C# widoczny jest jako IntPtr). W każdym razie usłyszysz termin HWND używany jako skrót do obsługi okien.
Istnieje kilka powodów pobierania HWND dla okna w aplikacji klasycznej WinUI 3, WPF lub WinForms. Jednym z przykładów jest użycie HWND do współdziałania z niektórymi obiektami środowiska Uruchomieniowego systemu Windows (WinRT), które są zależne od coreWindow do wyświetlania interfejsu użytkownika. Aby uzyskać więcej informacji, zobacz Wyświetlanie obiektów interfejsu użytkownika WinRT, które zależą od coreWindow.
WinUI 3 z językiem C#
Poniższy kod języka C# pokazuje, jak pobrać uchwyt okna (HWND) dla obiektu WinUI 3 Window. W tym przykładzie wywoływana jest metoda GetWindowHandle w klasie międzyoperacyjnej WinRT.Interop.WindowNative C#. Aby uzyskać więcej informacji na temat klas międzyoperacyjności języka C#, zobacz Wywoływanie interfejsów API międzyoperacyjności z poziomu aplikacji platformy .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 z językiem C++
Poniższy kod C++/WinRT pokazuje, jak pobrać uchwyt okna (HWND) dla obiektu okna WinUI 3. W tym przykładzie wywoływana jest metoda 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 z językiem C#
Poniższy kod języka C# pokazuje, jak pobrać uchwyt okna (HWND) dla obiektu okna WPF. W tym przykładzie użyto klasy WindowInteropHelper .
// MainWindow.xaml.cs
private void Button_Click(object sender, RoutedEventArgs e)
{
var wih = new System.Windows.Interop.WindowInteropHelper(this);
var hWnd = wih.Handle;
}
Formularze WinForm z językiem C#
Poniższy kod w języku C# pokazuje, jak uzyskać uchwyt okna (HWND) dla obiektu formularza WinForms. W tym przykładzie użyto właściwości NativeWindow.Handle .
// Form1.cs
private void button1_Click(object sender, EventArgs e)
{
var hWnd = this.Handle;
}
Określanie okna obsługującego element wizualizacji
Z poziomu elementu wizualizacji można uzyskać dostęp do elementu UIElement.XamlRoot; następnie XamlRoot.ContentIslandEnvironment; następnie właściwość ContentIslandEnvironment.AppWindowId zawiera identyfikator najwyższego poziomu Win32 HWND.
Tematy pokrewne
Windows developer