창 핸들(HWND) 검색

이 항목에서는 데스크톱 앱에서 창의 창 핸들을 검색하는 방법을 보여줍니다. 이 범위에는 WinUI(Windows UI 라이브러리) 3, WPF(Windows Presentation Foundation)WinForms(Windows Forms) 앱이 포함됩니다. 코드 예제는 C# 및 C++/WinRT로 제공됩니다.

위에 나열된 개발 및 UI 프레임워크는 (백그라운드에서) Win32 API를 기반으로 합니다. Win32에서 개체는 창 핸들이라는 값으로 식별됩니다. 그리고 창 핸들의 형식은 HWND입니다(C#에서 IntPtr로 표시됨). 어쨌든 HWND라는 용어는 창 핸들의 약식으로 사용됩니다.

WinUI 3, WPF 또는 WinForms 데스크톱 앱에서 창에 대한 HWND를 검색하는 데는 몇 가지 이유가 있습니다. 한 가지 예는 HWND를 사용하여 CoreWindow에 종속된 WinRT(특정 Windows 런타임) 개체와 상호 운용하여 UI(사용자 인터페이스)를 표시하는 것입니다. 더 많은 정보는 CoreWindow에 의존하는 WinRT UI 개체 표시를 참조하세요.

C#를 사용하여 WinUI 3

아래 C# 코드는 WinUI 3 Window 개체에 대한 HWND(창 핸들)를 검색하는 방법을 보여 줍니다. 이 예제에서는 WinRT.Interop.WindowNative C# interop 클래스에서 GetWindowHandle 메서드를 호출합니다. C# interop 클래스에 대한 자세한 내용은 .NET 앱에서 interop API 호출을 참조하세요.

// 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);
}

C++를 사용하여 WinUI 3

아래 C++/WinRT 코드는 WinUI 3 Window 개체에 대한 HWND(창 핸들)를 검색하는 방법을 보여 줍니다. 이 예제에서는 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);
}

C# 포함 WPF

아래 C# 코드는 WPF Window 개체에 대한 HWND(창 핸들)를 검색하는 방법을 보여 줍니다. 이 예제에서는 WindowInteropHelper 클래스를 사용합니다.

// MainWindow.xaml.cs
private void Button_Click(object sender, RoutedEventArgs e)
{
    var wih = new System.Windows.Interop.WindowInteropHelper(this);
    var hWnd = wih.Handle;
}

C를 사용하는 WinForms#

아래 C# 코드는 WinForms 양식 개체에 대한 HWND(창 핸들)를 검색하는 방법을 보여 줍니다. 이 예제에서는 NativeWindow.Handle 속성을 사용합니다.

// Form1.cs
private void button1_Click(object sender, EventArgs e)
{
    var hWnd = this.Handle;
}