Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Charlie BoT en 28 Febrero 2016, 15:55 pm



Título: Se puede usar un form para mostra contenido de
Publicado por: Charlie BoT en 28 Febrero 2016, 15:55 pm
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.

Código:
@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!


Título: Re: Se puede usar un form para mostra contenido de
Publicado por: Eleкtro en 28 Febrero 2016, 17:17 pm
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!


Título: Re: Se puede usar un form para mostra contenido de
Publicado por: Charlie BoT en 28 Febrero 2016, 17:55 pm
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.


Título: Re: Se puede usar un form para mostra contenido de
Publicado por: Eleкtro en 28 Febrero 2016, 19:26 pm
lo 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:
Código
  1. Public NotInheritable Class Form1 : Inherits Form
  2.  
  3.    Friend WithEvents JavaProcess As Process
  4.  
  5.    ' Dim procName As String = "java.exe"
  6.    ' 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"
  7.  
  8.    Dim procName As String = "cmd.exe"
  9.    Dim procArgs As String = "/C ""dir /B ""C:\Windows\system32\*"" """
  10.  
  11.    Private Sub Test() Handles MyBase.Shown
  12.  
  13.        Me.TextBox1.MaxLength = Integer.MaxValue
  14.        Me.TextBox1.Multiline = True
  15.        Me.TextBox1.ReadOnly = True
  16.        Me.TextBox1.ScrollBars = ScrollBars.Both
  17.  
  18.        Me.RunJavaConsole()
  19.  
  20.    End Sub
  21.  
  22.    Private Sub RunJavaConsole()
  23.  
  24.        Me.JavaProcess = New Process
  25.  
  26.        Me.JavaProcess.EnableRaisingEvents = True
  27.  
  28.        With Me.JavaProcess.StartInfo
  29.            .FileName = Me.procName
  30.            .Arguments = Me.procArgs
  31.            ' .WorkingDirectory = Especifica aquí el directorio de trabajo, puesto que usas rutas relativas en los argumentos.
  32.  
  33.            .UseShellExecute = False
  34.            .CreateNoWindow = True
  35.            .WindowStyle = ProcessWindowStyle.Hidden
  36.  
  37.            .RedirectStandardOutput = True
  38.            .RedirectStandardError = True
  39.        End With
  40.  
  41.        Me.JavaProcess.Start()
  42.        Me.JavaProcess.BeginOutputReadLine()
  43.        Me.JavaProcess.BeginErrorReadLine()
  44.  
  45.    End Sub
  46.  
  47.    Private Sub JavaProcess_OutputDataReceived(ByVal sender As Object, ByVal e As DataReceivedEventArgs) _
  48.    Handles JavaProcess.OutputDataReceived
  49.  
  50.        If (e.Data IsNot Nothing) Then
  51.  
  52.            Debug.WriteLine("StdOut: " & e.Data)
  53.  
  54.            If (Me.TextBox1.InvokeRequired) Then
  55.                Me.TextBox1.Invoke(Sub() Me.TextBox1.AppendText(e.Data & Environment.NewLine))
  56.  
  57.            Else
  58.                Me.TextBox1.AppendText(e.Data)
  59.  
  60.            End If
  61.  
  62.        End If
  63.  
  64.    End Sub
  65.  
  66.    Private Sub JavaProcess_ErrorDataReceived(ByVal sender As Object, ByVal e As DataReceivedEventArgs) _
  67.    Handles JavaProcess.ErrorDataReceived
  68.  
  69.        If (e.Data IsNot Nothing) Then
  70.  
  71.            Debug.WriteLine("StdErr: " & e.Data)
  72.  
  73.            If (Me.TextBox1.InvokeRequired) Then
  74.                Me.TextBox1.Invoke(Sub() Me.TextBox1.AppendText(e.Data & Environment.NewLine))
  75.  
  76.            Else
  77.                Me.TextBox1.AppendText(e.Data)
  78.  
  79.            End If
  80.  
  81.        End If
  82.  
  83.    End Sub
  84.  
  85.    Private Sub JavaProcess_Exited(ByVal sender As Object, ByVal e As EventArgs) _
  86.    Handles JavaProcess.Exited
  87.  
  88.        If (Me.TextBox1.InvokeRequired) Then
  89.            Me.TextBox1.Invoke(Sub() Me.TextBox1.ReadOnly = False)
  90.  
  91.        Else
  92.            Me.TextBox1.ReadOnly = False
  93.  
  94.        End If
  95.  
  96.        Me.JavaProcess.Dispose()
  97.  
  98.    End Sub
  99.  
  100. End Class

Saludos