Usuário com melhor resposta
Abrindo programa externo dentro de um Form em C#

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
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- Sugerido como Resposta William John Adam TrindadeModerator terça-feira, 4 de maio de 2010 20:21
- Marcado como Resposta Harley AraujoModerator quarta-feira, 12 de maio de 2010 15:22
-
Adiciona também:
using System.Diagnostics; using System.Threading; using System.Runtime.InteropServices;
msn: poseidonfba@hotmail.com- Marcado como Resposta Harley AraujoModerator quarta-feira, 12 de maio de 2010 15:22
Todas as Respostas
-
-
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 -
-
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- Sugerido como Resposta William John Adam TrindadeModerator terça-feira, 4 de maio de 2010 20:21
- Marcado como Resposta Harley AraujoModerator quarta-feira, 12 de maio de 2010 15:22
-
Adiciona também:
using System.Diagnostics; using System.Threading; using System.Runtime.InteropServices;
msn: poseidonfba@hotmail.com- Marcado como Resposta Harley AraujoModerator quarta-feira, 12 de maio de 2010 15:22
-
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 -
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