2010-02-18 4 views
0

Я пытаюсь захватить существующее окно и заменить его содержимым Winforms, которым я владею. Я подумал, что было бы здорово обменять внутреннюю ручку формы с той, которую я хочу переопределить, и задавался вопросом, пробовал ли кто-нибудь когда-либо?Заменить существующий Winform HWND другим?

Приветствия, Florian

ответ

0

Это должно легко попробовать, если вы выполняете в процессе и нити окна вы хотите заменить. Если вы не работаете с процессом и потоком исходного окна, это гораздо менее вероятно работает. Если это часть оболочки Windows, которую вы пытаетесь заменить, то очень вряд ли вы это заработаете.

Если вы можете сделать замену окна, вам нужно будет ответить на родительское окно так, чтобы оно ожидало, что исходное дочернее окно будет отвечать, но, возможно, вы уже об этом подумали.

Если родительское окно удерживает дескриптор окна исходного ребенка, ваша попытка заменить его просто не сработает (она все равно попытается поговорить с оригинальным дескриптором). но если он отслеживает ребенка по id, то все, что вам нужно сделать, это дать вашему окну одинаковый идентификатор окна и использовать SetWindowPos, чтобы придать ему тот же размер и местоположение и z-порядок, что и исходный ребенок, а затем уничтожить оригинальный ребенок.

Желаю вам удачи, это поведение с высоким риском, но все остальные хаки, которые вы могли бы попробовать, вместо подкласса и подключения.