VB 2005 - Exibindo os processos em execução


Para exibir uma lista de processos que esta rodando na sua máquina local basta usar a classe System.Diagnostics.Process para acessar a coleção de objetos que representam todos os processos que rodam atualmente.

Como exemplo vamos criar um projeto no VB2005 do tipo Windows Application e no formulário padrão form1.vb incluir um controle ListBox e um controle Button. Vamos exibir no listbox os processos que estiverem rodando. Para isto inclua o seguinte código no evento Click do botão de comando:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' ----- Exibe todos os processos de mais alto nivel
For Each processo As Process In Process.GetProcesses()
    If (processo.MainWindowTitle <> "") Then
          ListBox1.Items.Add("Programa: " & processo.MainWindowTitle)
    Else
          ListBox1.Items.Add("Processo: " & processo.ProcessName)
    End If
Next processo
End Sub

Executando o projeto teremos a exibição dos processos conforme figura abaixo:

Geralmente os processos e programas listados são os mesmos que você vê no gerenciador de tarefas do Windows embora o formulário form1 provavelmente não irá aparecer.

A classe System.Diagnostics.Process  inclui um membro estático chamado GetProcesses() que retorna a coleção de objetos processos cada um representando um processo que esta em execução.

Os objetos Process incluem muitas propriedades e métodos que permitem a você efetuar o tratamento para cada processo dependendo do nível de autorização de acesso concedido pelo administrado do sistema.

Um exemplo é o método Kill que força o encerramento do processo. Quando um processo com uma interface gráfica esta em execução o seu loop de mensagens esta no estado de espera. O loop executa cada momento que uma mensagem Windows é enviada para o processo pelo sistema operacional. Para forçar o encerramento do processo você pode usar o método Kill.

Este método é executado de forma assíncrona. Depois de chamar o método Kill chame o método WaitForExit para esperar o processo encerrar ou verifique a propriedade HasExited para determinar se o processo foi encerrado.

No exemplo abaixo tirado do site da Microsoft (http://msdn2.microsoft.com/en-gb/library/system.diagnostics.process.hasexited(VS.80).aspx) temos um exemplo que inicia uma instância do Bloco de Notas. O processo retorna a memória física usada do processo associado a cada 2 segundos para um intervalo máximo de 10 segundos. O exemplo detecta se o processo encerra antes que os 10 segundos  tenham passado. O exemplo fecha o processo se ele estiver rodando após 10 segundos.

Crie uma aplicação no VB 2005 do tipo Windows Application (console seria melhor) e no formulário principal inclua uma classe no menu Project -> Add class com o nome de processo.vb. A seguir inclua o seguinte código na classe:

Imports System

Imports System.Diagnostics

Imports System.Threading


Namespace
exemploProcesso


Class
testeProcesso


Public
Shared Sub
Main()


Try

   Dim processo As Process

   processo = Process.Start("Notepad.exe")
 

   ' Exibe a memoria usadao 5 vezes em um intervalo de 2 segundos

   Dim i As Integer

    For i = 0 To 4

       If Not processo.HasExited Then

           ' Descarta a informação armazenada sobre o processo

            processo.Refresh()

               ' Imprime o rsultado na caixa de texto do form1.vb

            Form1.TextBox1.Text += "Memória fisica usada: " + myProcess.WorkingSet64.ToString() + vbCrLf

                ' aguarda 2 segundos

            Thread.Sleep(2000)

        Else

                Exit For

        End If

   Next i

    ' fecha o processo enviando uma mensagem para janela principal

    processo.CloseMainWindow()

    ' libera os recursos usados

    processo.Close()

Catch e As Exception

    msgbox("Ocorreu a seguinte exceção:   " & e.Message

End Try

End Sub 'Main

End Class 'testeProcesso

End Namespace 'exemploProcesso

 

no formulário padrão form1.vb inclua uma caixa de texto e um botão de comando . No evento Click do botão de comando inclua o seguinte código:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

       exemploProcesso.testeProcesso.Main()

End Sub

Você pode se divertir com os demais métodos e propriedades da classe Process.

Até o próximo artigo VB.NET. 


José Carlos Macoratti