Come cambiare un proprietario di finestra usando il suo handle
Domanda
Voglio creare un modulo .NET come modulo principale per un'altra app esterna (non relativa a .NET, pura Win32) in modo che rimanga al di sopra di quella Win32App, ma non il resto delle app in esecuzione.
Ho l'handle di Win32App (fornito dalla stessa Win32App) e ho provato Win32 SetParent () funzione , tramite P / Invoke in C # , ma il mio .NET Form viene confinato in Win32App e non è quello che voglio.
Soluzione
Penso che tu stia cercando è P / Invoke SetWindowLongPtr (win32window, GWLP_HWNDPARENT, formhandle)
Altri suggerimenti
Sì! Ho già un'importazione P / Invoke di SetWindowLongPtr (che è x64 sicuro). E usando Reflector ho cercato la proprietà Form.Owner (ovvero il metodo get_Owner (valore del modulo)) e sono riuscito a cambiare il proprietario con
SetWindowLongPtr(childHdl, -8, OwnerHdl)
Stavo cercando cosa significasse -8 (0xFFFFFFFFFFFFFFF8) prima di poter pubblicare la soluzione qui, ma Joel l'ha già sottolineato.
Grazie!