VB 2005 - Capturando a saída de uma aplicação Console
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.
Nota: Veja mais detalhes sobre o uso do Process no artigo: VB.NET - Usando a classe System.Diagnostic.Proceess
Vamos mostrar isto na prática. Vamos capturar 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:
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.
Ex:
ipConfig.StartInfo.FileName = "cmd.exe" ipConfig.StartInfo.Arguments = "/c dir c:\temp"
Nestes casos não como evitar que a janela de comando Dos aparecer momentaneamente durante o processamento do programa cmd.exe.
Pegue o projeto completo aqui: saidaConsole.zip
Até o próximo artigo .NET...
José Carlos Macoratti