Mengambil handel jendela (HWND)

Topik ini menunjukkan kepada Anda caranya, di aplikasi desktop, untuk mengambil handel jendela untuk jendela. Cakupan mencakup aplikasi Windows UI Library (WinUI) 3, Windows Presentation Foundation (WPF), dan Formulir Windows (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 atas 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 yang digunakan sebagai singkatan untuk handel 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 handel 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 handel jendela (HWND) untuk objek Jendela 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# di bawah ini menunjukkan cara mengambil handel jendela (HWND) untuk 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;
}