Получение дескриптора окна (HWND)
В этом разделе показано, как в классическом приложении получить дескриптор окна для окна. В область рассматриваются приложения Библиотеки пользовательского интерфейса Windows (WinUI) 3, Windows Presentation Foundation (WPF) и Windows Forms (WinForms). Примеры кода представлены в C# и C++/WinRT.
Перечисленные выше платформы разработки и пользовательского интерфейса (в фоновом режиме) основаны на API Win32. В Win32 объект окна определяется значением, известным как дескриптор окна. А дескриптор окна — HWND (хотя он доступен в C# как IntPtr). В любом случае вы услышите термин HWND , используемый в качестве сокращения для дескриптора окна.
Существует несколько причин, по которым можно получить HWND для окна в классическом приложении WinUI 3, WPF или WinForms. Одним из примеров является использование HWND для взаимодействия с определенными объектами среда выполнения Windows (WinRT), которые зависят от CoreWindow для отображения пользовательского интерфейса. Дополнительные сведения см. в разделе Отображение объектов пользовательского интерфейса WinRT, зависящих от CoreWindow.
WinUI 3 с C#
В приведенном ниже коде C# показано, как получить дескриптор окна (HWND) для объекта Windows WinUI 3. В этом примере вызывается метод GetWindowHandle для класса взаимодействия C# WinRT.Interop.WindowNative . Дополнительные сведения о классах взаимодействия C# см. в статье Вызов API взаимодействия из приложения .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 с C++
В приведенном ниже коде C++/WinRT показано, как получить дескриптор окна (HWND) для объекта Windows WinUI 3. В этом примере вызывается метод 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 с 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;
}
Связанные темы
Windows developer
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по