c# - Obtener HWND fuera del objeto CoreWindow en UWP
(2)
Esta interfaz COM solo es accesible directamente al código C ++. En C #, tiene que declararlo usted mismo y hacerlo coincidir con la declaración de interfaz en C: / Archivos de programa (x86) / Windows Kits / 10 / Include / 10.0.10586.0 / winrt / CoreWindow.idl. Me gusta esto:
using System.Runtime.InteropServices;
...
[ComImport, Guid("45D64A29-A63E-4CB6-B498-5781D298CB4F")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface ICoreWindowInterop {
IntPtr WindowHandle { get; }
bool MessageHandled { set; }
}
La obtención de la referencia de interfaz requiere conversión, el compilador no le permitirá lanzar directamente desde el objeto CoreWindow. Se hace más fácilmente al dejar que el DLR haga el trabajo, así:
dynamic corewin = Windows.UI.Core.CoreWindow.GetForCurrentThread();
var interop = (ICoreWindowInterop)corewin;
var handle = interop.WindowHandle;
Esta breve documentación de MSDN dice que CoreWindow tiene ICoreWindowInterop que obtiene el handle HWND para CoreWindow. Pero no puedo encontrar referencias sobre cómo obtenerlo (C #). Ayuda por favor.
https://msdn.microsoft.com/en-us/library/dn302119(v=vs.85).aspx
Tenga en cuenta que no hay API compatibles para UWP que acepten un HWND . Cualquier API que llame fallará en la certificación de la Tienda Windows, e incluso si evita la Tienda Windows (por ejemplo, realizar una carga lateral o realizar una implementación de Enterprise) no hay garantía de que la aplicación funcionará en el futuro.