VB .NET - Acessando e exibindo os processos em execução


 Neste artigo veremos como acessar e exibir os processos em execução usando o VB .NET.

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.

É o que vamos fazer neste artigo.

recursos

Criando o projeto Windows Forms

Abra o VS 2017 e no menu Project clique em New Project;

Selecione Visual Basic e Windows Desktop e a seguir escolha o template Windows Forms App(.NET Framework);

Informe o nome TaskManager e clique no botão OK.

A seguir no formulário padrão inclua os seguintes controles:

Disponha os controles conforme o leiaute abaixo:

Neste exemplo vamos implementar a funcionalidade de encerrar um processo selecionado.

Agora vamos ao código do formulário.

1 - Evento Load do formulário

Private Sub frmMain_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

        txtNomeComputador.Text = System.Environment.MachineName.ToString
        Call PreencherLista(txtNomeComputador.Text)
    
End Sub

Neste código atribuimos o nome do computador à caixa de texto e chamamos o método PreencherLista() passando o nome do computador.

2 - Método PreencherLista()

Sub PreencherLista(ByVal nomeComputador As String)

        Dim Prc() As Process
        Dim i As Integer
        Dim lvwP As ListViewItem

        Try
            lvProcessos.Items.Clear()
            Prc = Process.GetProcesses(nomeComputador)
            For i = 0 To UBound(Prc)
                lvwP = lvProcessos.Items.Add(Prc(i).ProcessName.ToUpper)
                If nomeComputador <> System.Environment.MachineName Then
                    lvwP.SubItems.Add("Indisponível...")
                    lvwP.SubItems.Add("Indisponível...")
                    lvwP.SubItems.Add(Prc(i).Id)
                Else
                    lvwP.SubItems.Add(Prc(i).MainWindowTitle)
                    lvwP.SubItems.Add(Prc(i).Responding)
                    lvwP.SubItems.Add(Prc(i).Id)
                End If
            Next
        Catch
            lvProcessos.Items.Add("Erro ao enumerar os items...")
        End Try
    End Sub

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.

3 - Evento Click do botão Encerrar Processo

Private Sub btnEncerrarProcesso_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnEncerrarProcesso.Click

        Dim Prc As Process

        If txtNomeComputador.Text = System.Environment.MachineName.ToString Then
            Try
                Prc = Process.GetProcessById(lvProcessos.SelectedItems(0).SubItems(3).Text)
                Prc.Kill()
                lvProcessos.Items.Remove(lvProcessos.SelectedItems.Item(0))
            Catch
                MessageBox.Show("Não é possível fechar os processos, " & Err.Description, "Error:", MessageBoxButtons.OK, MessageBoxIcon.Stop)
            End Try
        Else
            MessageBox.Show("Você não pode fechar processos em uma máquina remota, somente visualizá-los!", "Error:", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End If
    End Sub

Neste código obtemos o ID do processo através da seleção do usuário :

Prc = Process.GetProcessById(lvProcessos.SelectedItems(0).SubItems(3).Text)

A seguir chamamos o método Kill() para encerrar o processo.

Finalmente para atualizar a exibição dos processos temos o código abaixo no evento Click do botão Atualizar:

Private Sub btnAtualizar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAtualizar.Click
        txtNomeComputador.Text = txtNomeComputador.Text.ToUpper
        Call PreencherLista(txtNomeComputador.Text)
    End Sub

Simplesmente chamamos novamente o método PreecherLista().

Executando projeto iremos obter:

Pegue o projeto implementado aqui:  Gerenciador_Tarefas_VBNET.zip (sem as referências)

"Combati o bom combate, acabei a carreira, guardei a fé.
Desde agora, a coroa da justiça me está guardada, a qual o Senhor, justo juiz, me dará naquele dia;
e não somente a mim, mas também a todos os que amarem a sua vinda. "
2 Timóteo 4:7,8

 

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?

 

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti