Cómo cambiar el propietario de una ventana utilizando su identificador
Pregunta
Quiero hacer un formulario .NET como el formulario más alto para otra aplicación externa (no relacionada con .NET, simplemente Win32), por lo que se mantiene por encima de Win32App, pero no el resto de las aplicaciones que se ejecutan.
Tengo el identificador de Win32App (proporcionado por Win32App), y probé Win32 SetParent () función , a través de P / Invocar en C # , pero luego mi formulario .NET se limita a Win32App y eso no es lo que quiero.
Solución
Creo que lo que estás buscando es P / Invoke SetWindowLongPtr (win32window, GWLP_HWNDPARENT, formhandle)
Otros consejos
¡Sí! Ya tengo una importación P / Invoke de SetWindowLongPtr (que es segura para x64). Y usando Reflector busqué en la propiedad Form.Owner (es decir, el método get_Owner (valor del formulario)) y logró cambiar el propietario con
SetWindowLongPtr(childHdl, -8, OwnerHdl)
Estaba buscando lo que significaba el -8 (0xFFFFFFFFFFFFFFFFFF8) antes de poder publicar la solución aquí, pero Joel ya lo ha señalado.
¡Gracias!