Olá pessoal, hoje gostaria de dar mais uma dica para quem programa na plataforma Windows Form. O que vou falar aqui é simples e útil no dia a dia. O precisa ser feita a verificação de processos dentro do sistema operacional. Esse processo pode ser pego de várias maneiras, vou mostrar duas mais eficientes. O objetivo do artigo é verificar se o programa já está rodando ou em funcionamento dentro do computador. Se estiver funcionando, o mesmo não pode abrir outra tela.

Usado: Visual Studio 2010, C#.NET, Windows Form.

 

if (System.Diagnostics.Process.GetProcessesByName("nome-projeto").Length >= 2)

{

  MessageBox.Show("Atenção: O Aplicativo já está aberto no seu computador.", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Stop,  MessageBoxDefaultButton.Button1);

 Application.Exit();

 return;

}

 



Code 1.1

A primeira verificação, como mostrado no Code 1.1, é pego diretamente pelo nome usando o método do framework chamado GetProcessesByName. A verificação é feita logo no início do aplicativo, geralmente no Load do primeiro formulário.

Todo o processo existente na máquina, o programa pode pegar passando apenas o nome do programa ou projeto. Geralmente o nome do projeto sem a extensão .exe pode ser buscada sem qualquer problema. O segredo para funcionar sem qualquer problema é o Length >=2, isso porque no momento, já existe um programa aberto e ao clicar novamente, dois processos serão abertos (quando falo em processos, digo o próprio programa .exe).

Note que, uma mensagem é mostrada na tela e o passo seguinte é finalizar o aplicativo com o Application.Exit(); e return. Segunda maneira A segunda maneira de pegar processos da máquina e verificar se existe algum processo funcionando, é utilizando for. Para isso, gerei um array e percorri o mesmo. (Code 1.2)

 

System.Diagnostics.Process[] processos;

processos = System.Diagnostics.Process.GetProcesses();

 

            // Faz um FOR (busca) em todos os processos

            for (int i = 0; i < processos.Length; i++)

            {

                // Verifica se um processo em especifico está sendo executado

                if (processos[i].ProcessName == "nome-projeto")

                {

                    MessageBox.Show("Nome: " + processos[i].ProcessName.ToString());

                }

            }

 

Code 1.2

Note que foi usado o GetProcesses que retorna um array de processos executado na máquina. Com isso, o for fica fácil de fazer quando se tem a quantidade. (Code 1.3)

 

for (int i = 0; i < processos.Length; i++)

 

Code 1.3

Dai em diante para pegar o nome do processo é uma mão na roda. Você pode pegar o id, pode matar o processo, pode verificar se está sendo executado e muito mais. O framework da Microsoft possibilita essa programação simples e tranqüila.

Bom, espero que tenha gostado e qualquer dúvida pode entrar em contato pelo site.