none
Abrindo programa externo dentro de um Form em C# RRS feed

  • Pergunta

  • Bom dia Pessoal,

    Sou novo programando em C# e estou com uma certa dificuldade em transforma um código que já possuo em VB para C#, o código basicamente é esse:

    Public Class Form1
      Inherits System.Windows.Forms.Form
      Declare Function ShowWindow Lib "user32" (ByVal hWnd As System.IntPtr, ByVal nCmdShow As Integer) As Boolean
      Private Const SW_MINIMIZE As Integer = 6
      Private Const SW_MAXIMIZE As Integer = 3
      Private Const SW_RESTORE As Integer = 9
    
      Declare Function SetParent Lib "user32" (ByVal hWndChild As System.IntPtr, ByVal hWndNewParent As System.IntPtr) As System.IntPtr
    
      Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim p As Process = System.Diagnostics.Process.Start("C:\TESTE.exe")
        p.WaitForInputIdle()
        SetParent(p.MainWindowHandle, Me.Panel1.Handle)
        ShowWindow(p.MainWindowHandle, SW_MAXIMIZE)
      End Sub

     Alguém poderia me ajudar...

     

    Abraços

    Raphael Pugliesi

    terça-feira, 4 de maio de 2010 12:16

Respostas

  • testa ai:

     

        [DllImport("user32.dll", EntryPoint = "SetParent")]
        public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
    
    //dentro do evento do botão
          Process p = Process.Start(@"d:\TesteCS.exe"); 
    
          Thread.Sleep(500);
          SetParent(p.MainWindowHandle, panel1.Handle); 


    msn: poseidonfba@hotmail.com
    terça-feira, 4 de maio de 2010 13:36
  • Adiciona também:

     

    using System.Diagnostics;
    using System.Threading;
    using System.Runtime.InteropServices;


    msn: poseidonfba@hotmail.com
    terça-feira, 4 de maio de 2010 13:40

Todas as Respostas

  • Bom, pra abrir um exe externo poderia fazer assim:

     

    System.Diagnostics.Process.Start(@"C:\Debug\WindowsFormsApplication1.exe");

    terça-feira, 4 de maio de 2010 13:01
  • Bom dia Daniel,

     

    Ok, o problema é que preciso abrir esse programa dentro de um form, no caso do exemplo estou abrindo dentro de um form que contém um Objeto Panel:

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim p As Process = System.Diagnostics.Process.Start("C:\TESTE.exe")
        p.WaitForInputIdle()
        SetParent(p.MainWindowHandle, Me.Panel1.Handle
    )
        ShowWindow(p.MainWindowHandle, SW_MAXIMIZE)
      End Sub

    ...

    Preciso rescrever o código que possuo em VB para C#..

    Agradeço sua atenção..

    Abraços


    Raphael Pugliesi
    terça-feira, 4 de maio de 2010 13:10
  • http://social.msdn.microsoft.com/forums/pt-BR/vscsharppt/thread/55871fa7-4b10-40cf-ada5-20f948ea6c36/

     

    esse post parece que atende sua necessidade.

    terça-feira, 4 de maio de 2010 13:21
  • testa ai:

     

        [DllImport("user32.dll", EntryPoint = "SetParent")]
        public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
    
    //dentro do evento do botão
          Process p = Process.Start(@"d:\TesteCS.exe"); 
    
          Thread.Sleep(500);
          SetParent(p.MainWindowHandle, panel1.Handle); 


    msn: poseidonfba@hotmail.com
    terça-feira, 4 de maio de 2010 13:36
  • Adiciona também:

     

    using System.Diagnostics;
    using System.Threading;
    using System.Runtime.InteropServices;


    msn: poseidonfba@hotmail.com
    terça-feira, 4 de maio de 2010 13:40
  • Muito obrigado Pessoal, funcionou certinho....

    Vou postar o Código se alguém precisar:

    Declare:
    
    [DllImport("user32.dll")]
      static extern IntPtr SetParent(
       IntPtr hWndChild,
       IntPtr hWndNewParent);
    
      [DllImport("user32.dll")]
      static extern Boolean ShowWindow(System.IntPtr hWnd, int nCmdShow);
      const int SW_MAXIMIZE = 3;
    
    Use:
    
     System.Diagnostics.Process p = new System.Diagnostics.Process();
       p.StartInfo.FileName = @"Teste.exe" ;
       p.Start();
       p.WaitForInputIdle();
       SetParent(p.MainWindowHandle, this.panel1.Handle);
       ShowWindow(p.MainWindowHandle, SW_MAXIMIZE);
    
    
    
    

    Raphael Pugliesi
    • Marcado como Resposta Pugliesi terça-feira, 4 de maio de 2010 14:52
    • Não Marcado como Resposta Pugliesi quarta-feira, 12 de maio de 2010 14:49
    terça-feira, 4 de maio de 2010 14:52
  • Boa tarde Pessoal,

     

    No mesmo problema que levantei, preciso fazer uma alteração, porém, não estou conseguindo:

     System.Diagnostics.Process p = new System.Diagnostics.Process();
          p.StartInfo.FileName = @"Teste.exe";
          p.StartInfo.FileName = @"C:\arquivo.doc";
          p.Start();
          p.WaitForInputIdle();
          SetParent(p.MainWindowHandle, this.panel1.Handle);
          ShowWindow(p.MainWindowHandle, SW_MAXIMIZE);

    Esse e o meu código que está funcionando, preciso mudar o processo para executar da seguinte forma obrigando o arquivo a abrir no programa que estou especificando.

    Da maneira que está, se o arquivo .doc estiver relacionado (extensão ao Word) a outro programa, no processo de abertura não usará o Teste.exe e sim o word.exe....

    Sei que consigo passar o paramentro se utilizar da seguinte forma:

    System.Diagnostics.Process (@"Teste.exe",C:\arquivo.doc")

    Porém, não consigo inserir o programa na Handle de um componente...

     

    Abraços...

     


    Raphael Pugliesi
    quarta-feira, 12 de maio de 2010 14:56