这篇简短的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; }
}
Run Code Online (Sandbox Code Playgroud)
获取接口引用需要强制转换,编译器不会让您直接从CoreWindow对象进行转换.通过让DLR完成工作最容易做到,如下所示:
dynamic corewin = Windows.UI.Core.CoreWindow.GetForCurrentThread();
var interop = (ICoreWindowInterop)corewin;
var handle = interop.WindowHandle;
Run Code Online (Sandbox Code Playgroud)
请注意,不存在接受 HWND 的 UWP 支持的 API。您调用的任何 API 都将无法通过 Windows 应用商店认证,即使您避免使用 Windows 应用商店(例如,旁加载或通过企业部署),也不能保证该应用程序将来会运行。