从UWP中的CoreWindow对象获取HWND

gt6*_*07a 6 c# hwnd uwp

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

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

Han*_*ant 9

此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)

  • 我只是通过微软提供的子弹,将子弹装进他的枪里取决于OP。 (4认同)
  • @ gt6707a:如果答案可以解决您的问题,则应该接受。这使将来的访问者更容易浏览和识别相关信息。 (2认同)

Pet*_*SFT 6

请注意,不存在接受 HWND 的 UWP 支持的 API。您调用的任何 API 都将无法通过 Windows 应用商店认证,即使您避免使用 Windows 应用商店(例如,旁加载或通过企业部署),也不能保证该应用程序将来会运行。