Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Topik ini menunjukkan cara mengambil handle jendela di aplikasi desktop. Cakupan mencakup aplikasi WinUI 3, Windows Presentation Foundation (WPF), dan Windows Forms (WinForms) ; contoh kode disajikan dalam C# dan C++/WinRT.
Kerangka kerja pengembangan dan UI yang tercantum di atas adalah (di belakang layar) yang dibangun di api Win32. Di Win32, objek jendela diidentifikasi oleh nilai yang dikenal sebagai handel jendela. Dan jenis handel jendela adalah HWND (meskipun muncul di C# sebagai IntPtr). Bagaimanapun, Anda akan mendengar istilah HWND sebagai singkatan untuk handle jendela.
Ada beberapa alasan untuk mengambil HWND untuk jendela di aplikasi desktop WinUI 3, WPF, atau WinForms Anda. Salah satu contohnya adalah menggunakan HWND untuk beroperasi dengan objek Windows Runtime (WinRT) tertentu yang bergantung pada CoreWindow untuk menampilkan antarmuka pengguna (UI). Untuk informasi selengkapnya, lihat Menampilkan objek UI WinRT yang bergantung pada CoreWindow.
WinUI 3 dengan C#
Kode C# di bawah ini menunjukkan cara mengambil handle jendela (HWND) untuk objek Jendela WinUI 3. Contoh ini memanggil metode GetWindowHandle pada kelas interop WinRT.Interop.WindowNative C#. Untuk informasi selengkapnya tentang kelas interop C#, lihat Memanggil API interop dari aplikasi .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 dengan C++
Kode C++/WinRT di bawah ini menunjukkan cara mengambil handle jendela (HWND) untuk objek Window di WinUI 3. Contoh ini memanggil metode 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 dengan C#
Kode C# berikut menunjukkan cara mendapatkan handle jendela (HWND) pada objek jendela WPF. Contoh ini menggunakan kelas 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 dengan C#
Kode C# di bawah ini menunjukkan cara mengambil handel jendela (HWND) untuk objek formulir WinForms. Contoh ini menggunakan properti NativeWindow.Handle .
// Form1.cs
private void button1_Click(object sender, EventArgs e)
{
var hWnd = this.Handle;
}
Menentukan jendela yang menghosting elemen visual
Dari elemen visual, Anda dapat mengakses UIElement.XamlRoot; kemudian XamlRoot.ContentIslandEnvironment; kemudian properti ContentIslandEnvironment.AppWindowId berisi ID Win32 HWND tingkat atas.
Topik terkait
- Menampilkan objek UI WinRT yang bergantung pada CoreWindow
- Memanggil API interop dari aplikasi .NET
- WinUI 3
- Windows Presentation Foundation (WPF)
- Formulir Windows (WinForms)
- C++/WinRT
- Win32 API
Windows developer