Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym temacie pokazano, jak w aplikacji na pulpit pobrać uchwyt okna. Zakres obejmuje WinUI 3, Windows Presentation Foundation (WPF) i Windows Forms (WinForms); przykłady kodu są prezentowane w języku 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 okna w aplikacji klasycznej WinUI, WPF lub WinForms. Przykładem jest użycie HWND do współdziałania z określonymi obiektami Windows Runtime (WinRT), które zależą 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 z językiem C#
Poniższy kod języka C# pokazuje, jak pobrać uchwyt okna (HWND) dla obiektu okna WinUI. 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łanie interfejsów API z aplikacji .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 z językiem C++
Poniższy kod C++/WinRT pokazuje, jak uzyskać uchwyt okna (HWND) dla obiektu Window w WinUI. 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 window.
auto windowNative{ this->m_inner.as<::IWindowNative>() };
HWND hWnd{ 0 };
windowNative->get_WindowHandle(&hWnd);
}
WPF z językiem C#
Poniższy kod C# pokazuje, jak uzyskać 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 wizualnego elementu można uzyskać dostęp do UIElement.XamlRoot; następnie do XamlRoot.ContentIslandEnvironment, a potem właściwość ContentIslandEnvironment.AppWindowId zawiera identyfikator najwyższego poziomu Win32 HWND.
Tematy pokrewne
- Wyświetlanie obiektów interfejsu użytkownika winRT, które zależą od coreWindow
- Wywołaj API międzyoperacyjne z aplikacji .NET
- WinUI
- Windows Presentation Foundation (WPF)
- Windows Forms (WinForms)
- C++/WinRT
- Win32 API