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
相关产品推荐
相关产品推荐

