Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
В этом разделе показано, как в настольном приложении получить дескриптор окна. Область охватывает WinUI 3, Windows Presentation Foundation (WPF) и Windows Forms (WinForms); примеры кода представлены в C# и C++/WinRT.
Перечисленные выше платформы разработки и пользовательского интерфейса основаны на API Win32. В Win32 объект окна определяется значением, известным как дескриптор окна. А тип дескриптора окна — это HWND (хотя он отображается в C# как IntPtr). В любом случае вы услышите термин HWND, используемый как сокращение для дескриптора окна.
Существует несколько причин для получения HWND для окна в настольном приложении WinUI, WPF или WinForms. Одним из примеров является использование HWND для взаимодействия с определенными объектами Windows Runtime (WinRT), зависящими от объекта CoreWindow для отображения пользовательского интерфейса. Дополнительные сведения см. в разделе "Отображение объектов пользовательского интерфейса WinRT", зависящих от CoreWindow.
WinUI с C#
Приведенный ниже код C# показывает, как получить дескриптор окна (HWND) для объекта Окна WinUI. В этом примере вызывается метод GetWindowHandle в классе взаимодействия WinRT.Interop.WindowNative C#. Дополнительные сведения о классах взаимодействия C# см. в разделе Call interop APIs from a .NET app.
// 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 с C++
Приведенный ниже код C++/WinRT показывает, как получить дескриптор окна (HWND) для объекта Окна WinUI. В этом примере вызывается метод 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 с C#
Приведенный ниже код C# показывает, как получить дескриптор окна (HWND) для объекта окна WPF. В этом примере используется класс WindowInteropHelper .
// MainWindow.xaml.cs
private void Button_Click(object sender, RoutedEventArgs e)
{
var wih = new System.Windows.Interop.WindowInteropHelper(this);
var hWnd = wih.Handle;
}
WinForms с C#
Приведенный ниже код C# показывает, как получить дескриптор окна (HWND) для объекта формы WinForms. В этом примере используется свойство NativeWindow.Handle .
// Form1.cs
private void button1_Click(object sender, EventArgs e)
{
var hWnd = this.Handle;
}
Определение окна, в котором размещен визуальный элемент
Из визуального элемента можно получить доступ к UIElement.XamlRoot, затем XamlRoot.ContentIslandEnvironment, затем свойство ContentIslandEnvironment.AppWindowId содержит идентификатор верхнеуровневого окна Win32 HWND.
Связанные темы
- Отображение объектов пользовательского интерфейса WinRT, зависящих от CoreWindow
- Взаимодействие с API через приложение .NET
- WinUI
- Windows Presentation Foundation (WPF)
- Windows Forms (WinForms)
- C++/WinRT
- Win32 API
Windows developer