Как изменить владельца окна, используя его дескриптор - PullRequest
9 голосов
/ 25 сентября 2008

Я хочу сделать форму .NET формой TopMost для другого внешнего приложения (не связанного с .NET, чисто Win32), чтобы оно оставалось выше этого Win32App, но не для остальных приложений, работающих.

У меня есть дескриптор Win32App (предоставляется самим Win32App), и я попробовал Win32 SetParent () функцию , через P / Invoke в C # , но потом моя форма .NET ограничивается Win32App, и это не то, что я хочу.

Ответы [ 2 ]

13 голосов
/ 25 сентября 2008

Я думаю, что вы ищете это P / Invoke SetWindowLongPtr(win32window, GWLP_HWNDPARENT, formhandle)

Поиск Google

2 голосов
/ 25 сентября 2008

Да! У меня уже есть импорт P / Invoke SetWindowLongPtr (который является безопасным для x64). И используя Reflector, я искал свойство Form.Owner (то есть метод get_Owner (значение формы)) и удалось сменить владельца на

SetWindowLongPtr(childHdl, -8, OwnerHdl)

Я искал, что означает -8 (0xFFFFFFFFFFFFFFF8), прежде чем я смог опубликовать решение здесь, но Джоэл уже указал его.

Спасибо!

...