Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to change a Window Owner using its handle

I want to make a .NET Form as a TopMost Form for another external App (not .NET related, pure Win32) so it stays above that Win32App, but not the rest of the apps running.

I Have the handle of the Win32App (provided by the Win32App itself), and I've tried Win32 SetParent() function, via P/Invoke in C#, but then my .NET Form gets confined into the Win32App and that's not what I want.

like image 286
Ricardo Amores Avatar asked Sep 25 '08 12:09

Ricardo Amores


2 Answers

I think you're looking for is to P/Invoke SetWindowLongPtr(win32window, GWLP_HWNDPARENT, formhandle)

Google Search

like image 183
Joel Lucsy Avatar answered Oct 17 '22 07:10

Joel Lucsy


Yes! I've already have a P/Invoke import of SetWindowLongPtr (which is x64 safe). And using Reflector I searched upon the Form.Owner property ( i.e. the get_Owner(Form value) method ) and managed to change the owner with

SetWindowLongPtr(childHdl, -8, OwnerHdl)

I was looking what the -8 (0xFFFFFFFFFFFFFFF8) meant before I could post the solution here, but Joel has already pointed it out.

Thanks!

like image 27
Ricardo Amores Avatar answered Oct 17 '22 05:10

Ricardo Amores