Se puede usar un form para mostra contenido de

Iniciado por Charlie BoT, 28 Febrero 2016, 15:55 PM

0 Miembros y 1 Visitante están viendo este tema.

Charlie BoT

Saludos, vengo con una inquietud y es...

Yo tengo un archivo (.bat) que genera una ventana de dos para levantar un jar, todo eso esta bien, pero se me puso en la mente la idea de darle un poco mas de onda a eso y ver si esa ventana es posible desde un formulario mediante un textbox.

El principal problema es que nunca vi algo parecido, capas que hay miles de temas pero es que no se como buscarlo correctamente a la info.
Si fuera posible me gustaría si algún usuario del foro con experiencia me pudiera orientar un poco sobre el tema, me seria de gran ayuda!

de paso dejo el código que levanta el jar para que puedan opinar con toda la información clara.


@ECHO OFF
java -Xms64m -Xmx128m -cp .\conf;.\lib\emulinker.jar;.\lib\commons-collections-3.1.jar;.\lib\commons-configuration-1.1.jar;.\lib\commons-el.jar;.\lib\commons-lang-2.1.jar;.\lib\commons-logging.jar;.\lib\commons-pool-1.2.jar;.\lib\log4j-1.2.12.jar;.\lib\nanocontainer-1.0-beta-3.jar;.\lib\picocontainer-1.1.jar;.\lib\xstream-1.1.2.jar;.\lib\commons-codec-1.3.jar;.\lib\commons-httpclient-3.0-rc3.jar org.emulinker.kaillera.pico.PicoStarter
PAUSE


Bueno desde ya muchas gracias!

Eleкtro

#1
No entiendo lo que pretendes hacer, ¿puedes explicarlo mejor?.

¿Quieres embedir la ventana de la CMD para que sea parte del Form?, ¿o simplemente quieres mostrar la salida de la consola en un TextBox?.

Para lo primero, y suponiendo que tu pregunta se refiera a Vb.Net y no VB6, una forma bastante atractiva sería utilizando este user-control (no es más que un RichTextBox personalizado):



Para lo segundo, puedo mostrarte un ejemplo de como hacerlo en Vb.Net, en cambio no manejo VB6, pero si tu pregunta es sobre VB6 entonces esto te servirá:

por favor, aclara a que lenguaje te refieres, ya que en este subforo ...nunca se sabe.

Saludos!








Charlie BoT

Si lo que quiero es mostrar la salida en un textbox dentro de un formulario... y Perdón no me di cuenta de aclarar que es para vb.NET.

Eleкtro

Cita de: Charlie BoT en 28 Febrero 2016, 17:55 PMlo que quiero es mostrar la salida en un textbox dentro de un formulario

Puedes usar el control que te mencioné, con el método Consolecontrol.StartProcess("java.exe", "argumentos...").

También puedes hacerlo de manera tradicional, aquí tienes un ejemplo detallado:

Otro ejemplo más acorde a tu situación:
Código (vbnet) [Seleccionar]
Public NotInheritable Class Form1 : Inherits Form

    Friend WithEvents JavaProcess As Process

    ' Dim procName As String = "java.exe"
    ' Dim procArgs As String = "-Xms64m -Xmx128m -cp .\conf;.\lib\emulinker.jar;.\lib\commons-collections-3.1.jar;.\lib\commons-configuration-1.1.jar;.\lib\commons-el.jar;.\lib\commons-lang-2.1.jar;.\lib\commons-logging.jar;.\lib\commons-pool-1.2.jar;.\lib\log4j-1.2.12.jar;.\lib\nanocontainer-1.0-beta-3.jar;.\lib\picocontainer-1.1.jar;.\lib\xstream-1.1.2.jar;.\lib\commons-codec-1.3.jar;.\lib\commons-httpclient-3.0-rc3.jar org.emulinker.kaillera.pico.PicoStarter"

    Dim procName As String = "cmd.exe"
    Dim procArgs As String = "/C ""dir /B ""C:\Windows\system32\*"" """

    Private Sub Test() Handles MyBase.Shown

        Me.TextBox1.MaxLength = Integer.MaxValue
        Me.TextBox1.Multiline = True
        Me.TextBox1.ReadOnly = True
        Me.TextBox1.ScrollBars = ScrollBars.Both

        Me.RunJavaConsole()

    End Sub

    Private Sub RunJavaConsole()

        Me.JavaProcess = New Process

        Me.JavaProcess.EnableRaisingEvents = True

        With Me.JavaProcess.StartInfo
            .FileName = Me.procName
            .Arguments = Me.procArgs
            ' .WorkingDirectory = Especifica aquí el directorio de trabajo, puesto que usas rutas relativas en los argumentos.

            .UseShellExecute = False
            .CreateNoWindow = True
            .WindowStyle = ProcessWindowStyle.Hidden

            .RedirectStandardOutput = True
            .RedirectStandardError = True
        End With

        Me.JavaProcess.Start()
        Me.JavaProcess.BeginOutputReadLine()
        Me.JavaProcess.BeginErrorReadLine()

    End Sub

    Private Sub JavaProcess_OutputDataReceived(ByVal sender As Object, ByVal e As DataReceivedEventArgs) _
    Handles JavaProcess.OutputDataReceived

        If (e.Data IsNot Nothing) Then

            Debug.WriteLine("StdOut: " & e.Data)

            If (Me.TextBox1.InvokeRequired) Then
                Me.TextBox1.Invoke(Sub() Me.TextBox1.AppendText(e.Data & Environment.NewLine))

            Else
                Me.TextBox1.AppendText(e.Data)

            End If

        End If

    End Sub

    Private Sub JavaProcess_ErrorDataReceived(ByVal sender As Object, ByVal e As DataReceivedEventArgs) _
    Handles JavaProcess.ErrorDataReceived

        If (e.Data IsNot Nothing) Then

            Debug.WriteLine("StdErr: " & e.Data)

            If (Me.TextBox1.InvokeRequired) Then
                Me.TextBox1.Invoke(Sub() Me.TextBox1.AppendText(e.Data & Environment.NewLine))

            Else
                Me.TextBox1.AppendText(e.Data)

            End If

        End If

    End Sub

    Private Sub JavaProcess_Exited(ByVal sender As Object, ByVal e As EventArgs) _
    Handles JavaProcess.Exited

        If (Me.TextBox1.InvokeRequired) Then
            Me.TextBox1.Invoke(Sub() Me.TextBox1.ReadOnly = False)

        Else
            Me.TextBox1.ReadOnly = False

        End If

        Me.JavaProcess.Dispose()

    End Sub

End Class


Saludos