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!
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):
- https://github.com/dwmkerr/consolecontrol
(https://github.com/dwmkerr/consolecontrol/raw/master/Assets/screenshot.png?raw=true)
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á:
- http://lmgtfy.com/?q=vb6+read+console+output
por favor, aclara a que lenguaje te refieres, ya que en este subforo ...nunca se sabe.
Saludos!
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.
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:
- Ejemplo detallado de como parsear la salida estándar y la salida de error de un proceso, de forma asíncrona. - By Elektro (http://foro.elhacker.net/buscador2-t378770.0.html;msg1958489#msg1958489)
Otro ejemplo más acorde a tu situación:
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