Win32: Carregando um aplicativo externo dentro de um Panel – C# Win Forms

Fala aí galera!

Bom, hoje quero falar de algo um tanto interessante, e bem útil em casos bem raros. Trata-se de carregar a janela de uma outra aplicação dentro da sua aplicação, como se a janela externa fosse parte do seu aplicativo, quando na verdade está sendo executada em um processo completamente separado.

Abaixo, um print do que falo:

Application Hoster

No caso acima, eu carreguei o Paint dentro do Panel da janela do meu aplicativo.

Eu já utilizei isso de forma prática no passado. Foi uma vez que eu criei um aplicativo para baixar charges animadas do site animatunes.com. As charges eram baixadas pelo aplicativo (no formato swf, flash) apenas usando a url da página. O aplicativo incluía um player de vídeo para rodar as charges. No entanto, naquela época, o componente SWF Player COM consumia muito processamento, e as vezes até travava. Então eu separei a aplicação em duas, sendo a primeira a aplicação em si,  e a outra apenas o componente SWF Player. Quando em execução, o projeto carregava o player do processo separado dentro de um panel, como se tudo fosse parte de um executável só. Caso o player travasse, era só reiniciar o processo do player e pronto. Foi a maneira que eu consegui para manter o projeto estável.

Mais ou menos o mesmo conceito é usado no Google Chrome, onde cada guia é executada em um processo separado. Se uma guia travar, você pode finaliza-la sem afetar em nada a aplicação.

A técnica acima, combinada com IPC (Inter Process Communication – Comunicação Inter Processual) lhe dá o poder de criar aplicações multi processos.

Não vou abordar o IPC neste post, mas pretendo faze-lo no futuro.

Segue o link para baixar o projeto do Application Hoster:

Application Hoster.zip – 60KB

O código está comentando para melhor entendimento.

Até a próxima.

Anúncios

6 comentários

  1. Muito doido, Herbert.. Parabéns pelo post..

    Já tivemos que fazer isso no sistema da empresa onde eu trabalho atualmente durante a migração de um aplicativo legado para a plataforma .NET.. O projeto foi dividido entre várias fases e, em cada fase, fomos substituindo algumas telas antigas (anteriormente desenvolvidas em VB5) pelas novas telas desenvolvidas em .NET.. Foi uma ótima estratégia, todos os clientes gostaram..

    Abraço!
    André Lima

  2. Olá Herbert
    Legal demais o seu post, nem sabia que isso era possivel hehehe. E exatamente como voce falou, o exemplo do Chrome encaixa perfeitamente.
    E fazendo a comunicação IPC fica mesmo possivel realizar muitas outras coisas, eu até realizei um pequeno projeto de um chat e publiquei no MSDN Galery, se depois quiser dar uma olhada seria bem legal: http://kelvinrodrigues.wordpress.com/2013/07/25/chat-console-application-utilizando-rpc-remote-procedural-call/

    1. Valeu Kelvin,

      Gostei do seu projeto, bem interessante e simples. Estou pensando em criar um exemplo real de aplicação Multi Processos pra postar, talvez eu use o RPC. Ainda estou analisando qual forma de IPC será melhor. Talvez eu explore uma um pouco menos usada hehe..

  3. Sei que não tem muito haver com o assunto mais você já fez algun post sobre como mudar o navegador default do webbrowser para o Google chorome ou o Mozilla em win forms?

    1. Olá Luiz,

      Isso não é possível. O controle WebBrowser é basicamente a engine do Internet Explorer. Não é possível configurá-lo para usar a engine do Chrome.

      Contudo, existe um projeto chamado Awesomium, que é basicamente um controle WebBrowser que usa a engine do Google Chrome. Creio que seja isso que você precisa:

      http://www.awesomium.com/

Deixe um comentário :)

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s