Как изменить владельца окна, используя его дескриптор
Вопрос
Я хочу создать форму .NET в качестве формы TopMost для другого внешнего приложения (не связанного с .NET, чистого Win32), чтобы оно оставалось над этим Win32App, но не над остальными запущенными приложениями.
У меня есть дескриптор Win32App (предоставленный самим Win32App), и я попробовал Функция Win32 SetParent(), с помощью P/Вызов в C#, но затем моя форма .NET ограничивается Win32App, а это не то, чего я хочу.
Решение
Я думаю, вы ищете P/Invoke SetWindowLongPtr(win32window, GWLP_HWNDPARENT, formhandle)
Другие советы
Да!У меня уже есть импорт SetWindowLongPtr P/Invoke (который безопасен для x64).И, используя Reflector, я искал свойство Form.Owner (т.е.Метод GET_OWNER (значение формы)) и удалось изменить владельца с
SetWindowLongPtr(childHdl, -8, OwnerHdl)
Прежде чем опубликовать решение здесь, я искал, что означает -8 (0xFFFFFFFFFFFFFF8), но Джоэл уже указал на это.
Спасибо!