Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo argomento illustra come, in un'app desktop, recuperare l'handle di una finestra. L'ambito copre WinUI 3, Windows Presentation Foundation (WPF) e Windows Forms (WinForms); gli esempi di codice sono presentati in C# e C++/WinRT.
I framework di sviluppo e interfaccia utente elencati in precedenza sono (dietro le quinte) basati sull'API Win32. In Win32 un oggetto finestra viene identificato da un valore noto come handle di finestra. E il tipo di handle di finestra è un HWND (sebbene in C# sia rappresentato come IntPtr). In ogni caso, sentirai il termine HWND usato come abbreviazione per l'handle di finestra.
Esistono diversi motivi per recuperare il HWND per una finestra nell'app desktop WinUI, WPF o WinForms. Un esempio consiste nell'usare l'HWND per interagire con determinati oggetti Windows Runtime (WinRT) che dipendono da un CoreWindow per visualizzare un'interfaccia utente. Per altre info, vedi Visualizzare oggetti dell'interfaccia utente WinRT che dipendono da CoreWindow.
WinUI con C#
Il codice C# seguente illustra come recuperare l'handle di finestra (HWND) per un oggetto Window WinUI. In questo esempio viene chiamato il metodo GetWindowHandle nella classe di interoperabilità C# WinRT.Interop.WindowNative C#. Per ulteriori informazioni sulle classi di interoperabilità di C#, vedere Chiamare le API di interoperabilità da un'app .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 con C++
Il codice C++/WinRT seguente mostra come recuperare l'handle di finestra (HWND) per un oggetto Window WinUI. In questo esempio viene chiamato il metodo 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 con C#
Il codice C# seguente illustra come recuperare l'handle di finestra (HWND) per un oggetto finestra WPF. In questo esempio viene utilizzata la classe 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 con C#
Il codice C# seguente illustra come recuperare l'handle di finestra (HWND) per un oggetto modulo WinForms. In questo esempio viene utilizzata la proprietà NativeWindow.Handle .
// Form1.cs
private void button1_Click(object sender, EventArgs e)
{
var hWnd = this.Handle;
}
Determinazione della finestra che ospita un elemento visivo
Da un elemento visivo puoi accedere a UIElement.XamlRoot; poi XamlRoot.ContentIslandEnvironment, quindi la proprietà ContentIslandEnvironment.AppWindowId contiene l'ID dell'HWND Win32 superiore.
Argomenti correlati
- Visualizzare gli oggetti dell'interfaccia utente WinRT che dipendono da CoreWindow
- Richiamare le API di interoperabilità da un'app .NET
- WinUI
- Windows Presentation Foundation (WPF)
- Windows Forms (WinForms)
- C++/WinRT
- Win32 API