2016-01-21 127 views

回答

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; 
+0

谢谢。这似乎工作。我在WindowHandle属性中有一些值。现在我需要弄清楚如何在C#的特定监视器中显示窗口。如果可能的话。 – gt6707a

+1

@ gt6707a:如果答案解决了您的问题,您应该接受它。这使得未来的访问者更容易浏览和识别相关信息。 – IInspectable

+0

问题是 - 你打算怎么处理那个HWND?没有支持HWND的API。 –

3

请注意有对UWP接受一个HWND不支持的API。您调用的任何API都将失败Windows Store认证,即使您避开Windows商店(例如,侧装或经过企业部署),也无法保证该应用将来可以使用。