1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Como abrir um .exe dentro de form (VB6)

Discussão em 'Programação' iniciada por NetGear, 20 de Fevereiro de 2008. (Respostas: 18; Visualizações: 10161)

  1. NetGear

    NetGear Power Member

    Boas a todos.

    A dúvida é a seguinte. Eu tenho um .exe já criado (só tenho mesmo o .exe, não disponho do código fonte, pois foi a única coisa que consegui recuperar) e queria chama-lo dentro de um novo programa.
    Não, não é isso que estão a pensar, quero o programa (.exe) a abrir embutido no novo form, não chama-lo a abrir independentemente.
    Dá para fazer isso?


    Espero que me tenha feito entender.
    Desde já, muito obrigado.

    Saudações
     
  2. Learner

    Learner I fold therefore I AM

    Também tenho a mesma dúvida. No meu caso, no VB Express 2008.
    Era como ter uma picture box e chamar para lá o exe. Não sei se isso é possível.
     
  3. NetGear

    NetGear Power Member

    Sim, era isso. Já pesquisei na Internet e não achei nada. Talvez não dê.
     
  4. Learner

    Learner I fold therefore I AM

    Achei um fórum (procurando com o título do tópico), mas era com o DELPHI. E também não o conseguiram ajudar.
    Dizem que na programação quase todo é possível. ;)
     
  5. NetGear

    NetGear Power Member

    Achei um que penso que tinha o que se queria (era um exemplo de programa). Pelo nome devia ser a abrir a calculadora num form. O senhor disponibilizou o download do exemplo de programa, mas o link de download do. zip já não existe. Também foi em 2005...
     
  6. Learner

    Learner I fold therefore I AM

    Ninguém sabe como fazer isto? Ou não é mesmo possível?
     
  7. Learner

    Learner I fold therefore I AM

    Parece que ninguém sabe. Ou então não é mesmo possível.
     
  8. Por acaso tenho a mesma dúvida... =(

    BTw, 1º Post =D
     
  9. joao.miguel

    joao.miguel Power Member

    Dêem uma vista de olhos nisto:

    [DllImport("user32.dll", EntryPoint="SetParent", SetLastError=true, CharSet=CharSet.Auto)]
    private static extern int SetParentExternal(IntPtr hWndChild, IntPtr hWndNewParent);

    Só precisam de ter o handle do processo que querem capturar, e da janela (normamelmente um user control) onde querem meter o processo.

    Se tiverem dúvidas digam qq coisa.
     
  10. Mach4_PT

    Mach4_PT Power Member

    Isto funcionou comigo(precisei deste código ainda abocado):

    Quote do site: http://www.vbforums.com/archive/index.php/t-348138.html
     
  11. Learner

    Learner I fold therefore I AM

    Enganei-me :o, é o VB 2005 Express Edition! Experimentei e dá erro em:
    ShellExecute Me.hWnd, "open", "c:\My folder\Test.doc", vbNullString, "C:\", ByVal 1&

    Vou instalar o VB6. Tenho de ver se descubro como é no 2005.
     
  12. NetGear

    NetGear Power Member

    Experimentei o código. Não abre no mesmo form. Não era isto que queria. Era abrir dentro do form, embutido. Mas obrigado na mesma.
     
  13. Learner

    Learner I fold therefore I AM

    Penso que não há maneira de fazer isso.
     
  14. mOrSa

    mOrSa Power Member

    Basicamente o que vocês querem é emular o ambiente gráfico do "DOS" dentro do form... se é que se pode chamar ambiente gráfico. Ora, isso não tem grande sentido, sequer. Querer usar o ambiente mais rudimentar, embora extremamente funcional, do DOS dentro de um form é um quanto ao tanto disparatado, senão reparem: se é pra usar o "DOS" (ter aquele aspecto) basta simplesmente executar o ficheiro, certo? Para quê complicar o simples?
    Todavia, desconheço qualquer analogia com os sistemas *NIX cujo código (normalmente C) corre num background (+/- invisivel) com um skin para o ambiente gráfico. Se é isto que pretendem fazer acho que não vão ter muito sucesso. Daquilo que estudei o Windows não foi desenhado para isso. De qualquer forma vale sempre a pena tentar.

    Já agora, o "exe" não pode ser reconstruído do zero usando a arquitectura .NET?

    1abraço!
     
  15. balute

    balute Power Member

    O melhor que podem fazer é:
    - executar o programa normalmente
    - colocar a janela desse programa dentro de um control que funcionará como parent, usando a API "SetParent" referida pelo joao.miguel
    - usar o handle da janela desse programa para enviar acções conforme necessário (por exemplo, mover a janela) através de APIs

    O resultado é este (neste caso, pus o Firefox dentro de um painel):
    [​IMG]

    Como é óbvio, os controls, as variáveis, as funções, etc, internos desse programa não são reconhecidos pelo pelo novo programa.
     
    Última edição: 23 de Fevereiro de 2008
  16. Learner

    Learner I fold therefore I AM

    Era isto que eu queria. Sei que não dá para por os dois programas a comunicar, mas assim, ficava tudo numa janela mais à mão.

    Obrigado.
     
  17. RuiBranco

    RuiBranco Folding Member


    testei abrir o MScalc no meu programa e consegui comunicar com o calc em todos os aspectos, porquê não vai dar com o firefox alias em que aspectos nao vou conseguir comunicar ?

    Cumps. Rui
     
  18. The_True_Eue

    The_True_Eue Power Member

    Já foi referido antes mas, de qualquer forma... Se o programa que queres correr lá dentro é .NET provavelmente consegues obter o código fonte com esta ferramenta. Se for esse o caso até podes fazer tudo numa só aplicação. Se não for esse o caso... Talvez a alternativa sugerida com SetParent funcione. Em VB .NET deves usar PInvoke, através do atributo DllImport, tal como o joao.miguel sugeriu. Ele usou foi C#.
    Em VB .NET ficaria algo parecido com:
    Código:
    <DllImport("user32.dll", EntryPoint="SetParent", SetLastError=true, CharSet=CharSet.Auto)> _
    Private Shared Sub SetParentExternal(hWndChild As IntPtr, hWndNewParent As IntPtr) As Integer
    Não sei como fica o extern em VB, mas o importante aqui é o atributo DllImport.
     
  19. balute

    balute Power Member

    O que queres dizer com "comunicar", nesse contexto?
    É claro que podes trabalhar com a calc tal como se ela estivesse fora do form, pois a única anormalidade é precisamente essa: estar dentro de um form. De resto, podes mexer na calc normalmente.

    O que é impossível é comunicar com os elementos internos da calc (botões, etc.) através de código. Por exemplo, não consegues alterar o conteúdo da caixa de texto onde aparece o resultado dos cálculos, porque ela nem sequer é reconhecida pelo programa que criaste. Também não podes adicionar mais botões e funcionalidades à calc, porque isso implicaria interagir com o código-fonte da calc.
     

Partilhar esta Página