Можно ли внедрить приложение Windows Form в другое приложение в качестве дочернего элемента MDI в VB.NET?

Я создаю программу, которая взаимодействует с другой программой, и я хотел бы «внедрить» свою программу в эту программу как дочернее окно MDI. Возможно ли это, и если да, то можно ли это сделать в VB.NET? Какие подводные камни связаны с этим?


person Steven    schedule 29.08.2010    source источник
comment
Как упомянул Ганс в комментариях под моей публикацией — так что позвольте мне вернуться к вам — Является ли программа контроллера MDI управляемым процессом и Какую версию CLR вы используете?   -  person t0mm13b    schedule 30.08.2010


Ответы (1)


Это можно сделать двумя способами. Первый — получить копию Detours. и использовать pinvoke для внедрения вашего процесса в этот родительский процесс с MDI-контроллером, второй способ, хотя и более опасный, заключается в том, чтобы подключиться к оконным сообщениям MDI-контроллера и внедрить код, который будет выполняться. поскольку контроллер MDI работает в отдельном процессе, вы можете столкнуться с «нарушением прав доступа» при попытке доступа к памяти другого процесса, а именно к контроллеру MDI.

Вы, безусловно, можете подключиться к этому процессу и перехватить сообщения, взгляните на этот образец, найденный здесь (написано на C#, но вы можете легко добавить ссылку на свой проект VB.NET) и здесь также.

Это зависит от того, как далеко вы хотите зайти, возможно, вам придется разрешить вашему процессу доступ к защищенному пространству памяти вашим контроллером MDI, который находится в другом процессе, повысив его... попробуйте эти примеры хуков в предоставленных ссылках и посмотрите, как это идет...

person t0mm13b    schedule 29.08.2010
comment
Интересно. Спасибо за ссылки; Я обязательно присмотрюсь к ним! - person Steven; 30.08.2010
comment
Томми, постарайся сосредоточиться на том, что нужно для внедрения CLR, и правильно инициализируй его, чтобы он мог запускать управляемый код в целевом процессе. Хорошим дополнительным вопросом к ОП может быть: это управляемый процесс? Какую версию CLR он загружает? - person Hans Passant; 30.08.2010
comment
@Hans: На самом деле хороший момент, несмотря на упоминание VB.NET и пометку как таковую .... я полностью согласен ... - person t0mm13b; 30.08.2010