这篇简短的MSDN文档称CoreWindow具有ICoreWindowInterop,它获取CoreWindow的句柄HWND。但我找不到如何获得它的参考(C#)。求助。
https://msdn.microsoft.com/en-us/library/dn302119(v=vs.85).aspx
答案 0 :(得分:5)
此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;
答案 1 :(得分:3)
请注意 UWP不支持接受HWND的API 。您调用的任何API都将无法通过Windows应用商店认证,即使您避开Windows应用商店(例如,侧载或通过企业部署),也无法保证该应用将来能够正常运行。
答案 2 :(得分:0)
没有支持UWP的接受HWND的API
尽管通常UWA应用程序永远都不应使用HWND,但有许多WinRT API支持接受HWND以支持Win32 Apps中的使用。这是example和another。 C#客户端将需要使用互操作技术,此处是an example。