从UWP中的CoreWindow对象获取HWND

这篇简短的MSDN文档称CoreWindow具有ICoreWindowInterop,它获取CoreWindow的句柄HWND。 但是我找不到关于如何获得它的引用(C#)。 请帮忙。

https://msdn.microsoft.com/en-us/library/dn302119(v=vs.85).aspx

此COM接口只能直接访问C ++代码。 在C#中,您必须自己声明它并使其与C:\ Program Files(x86)\ Windows Kits \ 10 \ Include \ 10.0.10586.0 \ winrt \ CoreWindow.idl中的接口声明匹配。 像这样:

using System.Runtime.InteropServices; ... [ComImport, Guid("45D64A29-A63E-4CB6-B498-5781D298CB4F")] [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] interface ICoreWindowInterop { IntPtr WindowHandle { get; } bool MessageHandled { set; } } 

获取接口引用需要进行转换,编译器不会让您直接从CoreWindow对象进行转换。 通过让DLR完成工作最容易实现,如下所示:

  dynamic corewin = Windows.UI.Core.CoreWindow.GetForCurrentThread(); var interop = (ICoreWindowInterop)corewin; var handle = interop.WindowHandle; 

请注意,UWP没有支持接受HWND的API 。 您调用的任何API都将无法通过Windowsapp store认证,即使您避开Windowsapp store(例如,侧载或通过企业部署),也无法保证该应用将来能够正常运行。