从UWP中的CoreWindow对象获取HWND

时间:2016-01-21 21:55:39

标签: c# uwp hwnd

这篇简短的MSDN文档称CoreWindow具有ICoreWindowInterop,它获取CoreWindow的句柄HWND。但我找不到如何获得它的参考(C#)。求助。

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

3 个答案:

答案 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中的使用。这是exampleanother。 C#客户端将需要使用互操作技术,此处是an example