Abrir o programa apenas uma vez
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()); } }
|
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++)
|
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.
Sign up to our newsletter
Receive our latest updates about programming languages, software, database, books, ebooks, classes, jobs and more.