You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinUI 3(C++)如何在Page中获取主窗口句柄

在WinUI 3 Page中获取主窗口原生句柄(HWND)

你的代码在Window中有效是因为this指向Window实例,可直接转换为IWindowNative,但Page本身不是Window类型,所以需要先获取Page关联的Window实例,再获取句柄。

方法1:通过Page的XamlRoot获取所属Window

这是最可靠的方式,能确保拿到当前Page所在的窗口:

// Page1.xaml.cpp中
auto currentWindow = this->XamlRoot().Window();
auto windowNative = currentWindow.try_as<::IWindowNative>();
winrt::check_bool(windowNative);
HWND hWnd{ 0 };
windowNative->get_WindowHandle(&hWnd);

方法2:通过应用全局Windows集合获取主窗口

如果你的应用只有一个主窗口,可以直接取集合中的第一个窗口:

// Page1.xaml.cpp中
auto mainWindow = winrt::Microsoft::UI::Xaml::Application::Current().Windows().GetAt(0);
auto windowNative = mainWindow.try_as<::IWindowNative>();
winrt::check_bool(windowNative);
HWND hWnd{ 0 };
windowNative->get_WindowHandle(&hWnd);

注意:使用try_as转换后一定要用winrt::check_bool校验,避免空指针访问。

内容的提问来源于stack exchange,提问作者Gaurang Dave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 14:45:58