Olá pessoal, tudo bem? Como capturar o resultado do processamento de uma aplicação console em sua aplicação Windows no VB 2005 Express?
Boa pergunta , garoto!
Para poder realizar esta tarefa, você deve usar a propriedade StartInfo da classe Process para redirecionar a saída de uma aplicação console para o seu código. A saída redirecionada irá aparecer como sendo um objeto StreamReader padrão , dai em diante você realizar o tratamento padrão.
Um componente Process fornece acesso ao processo que esta sendo executado em um computador. Uma thread é a unidade básica na qual o sistema operacional aloca o tempo de processamento e pode executar qualquer parte de código de um processo, incluindo partes que estão sendo executadas por outra thread.
O componente Process é uma ferramenta útil para iniciar, parar, controlar e monitorar aplicações, e, através dele você pode obter uma lista dos processos que estão rodando ou pode também iniciar um novo processo.
Vamos mostrar isto na prática. Capturaremos a saída do processamento da execução do comando ipconfig.exe.
O comando ipconfig mostra as configurações de rede da sua máquina local fornecendo informações como ip, mascara de rede , etc.
Abra o Visual Basic 2005 Express e crie uma nova aplicação do tipo Windows Forms chamada saidaConsole.
No formulário padrão form1.vb inclua os seguintes controles:
- Um ListBox chamado lstSaidaDados
- Um CheckBox chamado chkIncluirTudo e defina sua propriedade Text para : “Use “/Tudo” para obter todos os detalhes”
- Um Button chamado btnAcionarProcesso. Defina sua propriedade Text para: Processar
O leiaute final do formulário do projeto deverá ser igual ao da figura abaixo:

Inclua o seguinte código no evento Click do botão de comando :
Private Sub btnAcionarProcesso_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAcionarProcesso.Click
' ----- Carrega a saida do comando ipconfig.exe para o controle ListBox.
Dim ipConfig As Process
Dim umaLinha As String
Dim linhaPartes() As String
' ----- Remove qualquer item existente na listbox
lstSaidaDados.Items.Clear()
' ----- Constroi e executa o comando
ipConfig = New Process()
ipConfig.StartInfo.FileName = "ipconfig.exe"
'verifica se vai exibir todos os detalhes
If (chkIncluirTudo.Checked = True) Then ipConfig.StartInfo.Arguments = "/All"
'inicia o processo
ipConfig.StartInfo.UseShellExecute = False
ipConfig.StartInfo.RedirectStandardOutput = True
ipConfig.StartInfo.CreateNoWindow = True
ipConfig.Start()
' ----- Processa cada linha de entrada
Do While Not ipConfig.StandardOutput.EndOfStream
' ----- Ignora linhas em branco.
umaLinha = ipConfig.StandardOutput.ReadLine()
If (Trim(umaLinha) = "") Then Continue Do
' ----- Cabeçalho não possui espaços em branco
If (umaLinha = umaLinha.TrimStart) Or (InStr(umaLinha, ":") = 0) Then
lstSaidaDados.Items.Add(umaLinha.Trim)
Else
' ----- Uma linha de detalhe. O formato é:
' Titulo ... : Dados
linhaPartes = umaLinha.Trim.Split(":"c)
linhaPartes(0) = Replace(linhaPartes(0), ". ", "")
linhaPartes(1) = linhaPartes(1).Trim
lstSaidaDados.Items.Add(vbTab & linhaPartes(0) & ":" & linhaPartes(1))
End If
Loop
ipConfig.WaitForExit()
ipConfig.Dispose()
End Sub
Executando o projeto e marcando a opção para exibir todos os detalhes o resultado obtido pode ser visto na figura abaixo:

Alguns programas de linha de comando, como dir.exe, não são realmente programas, mas comandos embutidos no processador Command. Para estes programas você vai precisar usar a instrução cmd.exe para o processo filename e passar o comando atual como um argumento com a opção /c.
Exemplo:
ipConfig.StartInfo.FileName = "cmd.exe"
ipConfig.StartInfo.Arguments = "/c dir c:\temp"
Nestes casos não podemos evitar que a janela de comando Dos apareça momentaneamente durante o processamento do programa cmd.exe.
Faça download do projeto completo aqui.
Até o próximo artigo!




