segunda-feira, 26 de maio de 2008

Executar Prompt de Comando a partir do VB.net

Forma fácil de executar comandos do prompt apartir do Vb.net.

Adicione duas caixas de textos e um botão de ação, onde a primeira serve para enviar comandos e a segunda para receber os os dados da janela do prompt.

Segue código abaixo:
-------------------------------------------

Public Class hckGoogleBusca

    Private Sub btnTeste_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles btnTeste.Click
        Dim CMD As New Threading.Thread(AddressOf AbreCMD)
        CMD.Start()
    End Sub

    Private Sub AbreCMD()

        'DECLARA PROCESSO E INFORMAÇÕES DE INÍCIO
        Dim CMDProcesso As New Process
        Dim CMDInfoInicio As New System.Diagnostics.ProcessStartInfo

        'INICIA NOVO PROMPT DE COMANDO
        CMDInfoInicio.FileName = "cmd"

        'REDIRECIONA INPUT
        CMDInfoInicio.RedirectStandardInput = True

        'REDIRECIONA OUTPUT
        CMDInfoInicio.RedirectStandardOutput = True

        'REQUERIDO PARA REDIRECIONAMENTO
        CMDInfoInicio.UseShellExecute = False

        'SETA INFORMAÇÕES DE INICIALIZAÇÃO
        CMDProcesso.StartInfo = CMDInfoInicio

        'INICIA PROCESSO

        CMDProcesso.Start()


        'DECLARA STREAMS DE LEITURA E ESCRITA
        'E OS SETA COMO INPUT E OUTPUT DO PROCESSO

        Dim SR As System.IO.StreamReader = CMDProcesso.StandardOutput
        Dim SW As System.IO.StreamWriter = CMDProcesso.StandardInput

        'ENVIA COMANDO APARTIR DA CAIXA DE TEXTO
        SW.WriteLine(txtCmdEnviado.Text)

        'ENVIA COMANDO PARA O PROMPT (SAIR)
        SW.WriteLine("exit")

        'RETORNA RESULTADO DO PROMPT NUMA CAIXA DE TEXTO
        txtCmdRecebido.Text = SR.ReadToEnd

        'FECHA STREAMS
        SW.Close()
        SR.Close()

    End Sub


End Class

7 comentários:

Unknown disse...

Muito bom cara , a tempos to procurando algo nesse sentido, mas aproveitando a deixa, como faço no caso de um teste de telnet, pra eu pegar se da erro ou nao no teste, desde já muito obrigado

Ronaldo Souza

Anônimo disse...

Olá gostaria de tirar uma dúvida :
o txtCmdEnviado e o txtCmdRecebido não deveriam ser declarados ?

Silvio Ricardo disse...

Olá Clever,


Não há necessidade de declaração, pois se tratam de objetos.

Em outras palavras: são duas caixas de texto que devem ser adicionadas ao formulário; uma deve conter o comando que você deseja enviar (txtCmdEnviado) e a outra é a resposta do prompt de comando (o resultado após execução do mesmo).


Fico feliz em ter ajudado.

Att. Silvio Ricardo

Anônimo disse...

Espetacular!!

Ajudou me imenso!!


Muito obrigado e continuação :)

Cláudio disse...

Muito bom código.

Josino Dias Junior disse...

Pra mim aparece o seguinte erro

Operação entre threads inválida: controle 'textbox1' acessado de um thread que não é aquele no qual foi criado."}

Administrador do Blog disse...

Resposta ao Josino Dias.
Coloque assim antes sem as setas...

---> Control.CheckForIllegalCrossThreadCalls = False <---
Dim CMD As New Threading.Thread(AddressOf AbreCMD)
CMD.Start()

:)