这篇简短的MSDN文档说CoreWindow具有ICoreWindowInterop,它可以获取CoreWindow的句柄HWND。但是我找不到有关如何获取它的参考(C#)。请帮助。从UWP中的CoreWindow对象中获取HWND
https://msdn.microsoft.com/en-us/library/dn302119(v=vs.85).aspx
这篇简短的MSDN文档说CoreWindow具有ICoreWindowInterop,它可以获取CoreWindow的句柄HWND。但是我找不到有关如何获取它的参考(C#)。请帮助。从UWP中的CoreWindow对象中获取HWND
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; }
}
获取接口引用需要强制转换,编译器不会让你直接从CoreWindow对象强制转换。这是最容易让DLR完成把工作做好,像这样:
dynamic corewin = Windows.UI.Core.CoreWindow.GetForCurrentThread();
var interop = (ICoreWindowInterop)corewin;
var handle = interop.WindowHandle;
请注意有对UWP接受一个HWND不支持的API。您调用的任何API都将失败Windows Store认证,即使您避开Windows商店(例如,侧装或经过企业部署),也无法保证该应用将来可以使用。
谢谢。这似乎工作。我在WindowHandle属性中有一些值。现在我需要弄清楚如何在C#的特定监视器中显示窗口。如果可能的话。 – gt6707a
@ gt6707a:如果答案解决了您的问题,您应该接受它。这使得未来的访问者更容易浏览和识别相关信息。 – IInspectable
问题是 - 你打算怎么处理那个HWND?没有支持HWND的API。 –