Как изменить владельца окна, используя его дескриптор

StackOverflow https://stackoverflow.com/questions/133122

  •  02-07-2019
  •  | 
  •  

Вопрос

Я хочу создать форму .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), но Джоэл уже указал на это.

Спасибо!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top