在 UWP 中获取 HWND 从 CoreWindow 对象中获取
本文关键字:获取 CoreWindow 对象 HWND UWP | 更新日期: 2023-09-27 18:31:19
这个简短的MSDN文档说CoreWindow具有ICoreWindowInterop,它可以获取CoreWindow的句柄HWND。但是我找不到有关如何获取它的参考资料(C#)。请帮忙。
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 应用商店认证,即使你避免使用 Windows 应用商店(例如,旁加载或通过企业部署),也不能保证该应用将来会正常工作。
UWP 没有受支持的接受 HWND 的 API
虽然通常 UWA 应用不应推理 HWND,但有许多 WinRT API 支持接受 HWND 以支持从 Win32 应用使用。这是一个例子和另一个例子。C# 客户端需要使用互操作技术,下面是一个示例。