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.