В моем приложении winforms я пытаюсь получить дескриптор главного окна, поэтому я могу установить его как родительский в мое модальное окно wpf. Я не слишком разбираюсь в winforms, поэтому после небольшого поиска в Google я нашел два способа получить его.
-
System.Windows.Forms.Application.OpenForms[0].Handle
-
System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle
(1), похоже, всегда возвращает то же значение, которое кажется правильным (по крайней мере мое модальное окно ведет себя как и ожидалось), тогда как (2) иногда возвращает то же значение, что и (1), но иногда - совершенно другой указатель, который, похоже, не работает (мое модальное окно появляется поверх каждого другого окна, а не только родительского окна).
Может кто-нибудь объяснить разницу между этими двумя методами? Нормально ли, что иногда они возвращают разные результаты?
Edit:
В случае, если кто-то еще задается вопросом: как только вы получите дескриптор, вы можете использовать его, создав WindowInteropHelper
class:
public static void SetInteropParent(this Window wpfDialogWindow, IntPtr winformsParentHandle)
{
new WindowInteropHelper(wpdDialogWindow) { Owner = winformsParentHandle };
}