Archive for September 2010

Verificar se um programa já está em execução

Pessoal, neste post sobre C# básico, vou mostrar como identificar se um programa já está em execução. Vamos aproveitar também ver como listar todos os programas que estão em execução no computador.

Para começar, crie um projeto em C# do tipo Console Application e logo em seguida vamos modificar o program.cs conforme abaixo:

   1: static void Main(string[] args)

   2:         {

   3:             string Processo = Process.GetCurrentProcess().ProcessName;

   4:             if(Process.GetProcessesByName(Processo).Length > 1)

   5:             {

   6:                 Console.WriteLine("Programa em execução");

   7:                 return;

   8:             }


Veja que é bem simples, basicamente estamos verificando se o nosso processo (que é o programa), está na lista de processos em execução, e se estiver, mostramos uma mensagem e finalizamos o programa.

Podemos também transformar este código em uma função reutilizável, veja:

   1: static void Main(string[] args)

   2:         {

   3:             if(VerificaProgramaEmExecucao())

   4:             {

   5:                 Console.WriteLine("Programa em execução");

   6:                 return;

   7:             }

   8:             Console.WriteLine("Programa executando");

   9:             Console.ReadKey();

  10:         }

  11:  

  12:         public static bool VerificaProgramaEmExecucao()

  13:         {

  14:             return Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName).Length > 1;

  15:         }


Assim você simplesmente chama o método VerificaProgramaEmExecucao() e se ele retornar TRUE, o programa está ativo.

Para finalizar, vamos mostrar a lista de processos em execução:

   1: Console.WriteLine("Processos em execução");

   2: Console.WriteLine("---------------------");

   3: foreach(var proc in Process.GetProcesses())

   4: {

   5:     Console.WriteLine("{0} - {1}",proc.ProcessName,proc.Id);

   6: }


No código acima, mostramos o nome do processo e o seu ID, mas se você observar a classe Proccess, verá que existem diversas propriedades e métodos que podem ser usados.

É isto aí pessoal, abraços e até a próxima.

Carlos dos Santos.

Passando parâmetros para uma aplicação .Net

Pessoal, seguindo com os posts sobre C# básico, vou mostrar como passar parâmetros para uma aplicação em .Net usando C# em um Windows Forms.

Primeiramente crie uma aplicação Windows Forms:

image

Eu estou usando o Visual Studio 2010 e o Framework 4, mas você pode usar qualquer versão do Visual Studio para executar este exemplo.

Após criar a aplicação vamos ao arquivo Program.cs, onde vamos colocar a variável que irá receber os parâmetros:

   1: [STAThread]

   2: static void Main(string[] parametros)

   3: {

   4:     Application.EnableVisualStyles();

   5:     Application.SetCompatibleTextRenderingDefault(false);

   6:     Application.Run(new frmPrincipal());

   7: }


Neste exemplo eu criei uma variável chamada parametros que irá receber os argumentos da linha de comando. Se você precisa usar o parâmetro somente para acionar alguma parte do seu programa, pode fazer assim:

   1: static void Main(string[] parametros)

   2: {

   3:     if(parametros.Length > 0)

   4:     {

   5:         if(parametros[0].ToUpper() == "/CONFIG")

   6:         {

   7:             frmConfig config = new frmConfig();

   8:             config.ShowDialog();

   9:             Application.Exit();

  10:             return;

  11:         }

  12:     }


Primeiro você testa se recebeu algum parâmetro e depois faz a verificação. Eu fiz a conversão para Upper() fica mais simples a verificação. Agora você pode estar se perguntando, como vou fazer debug da aplicação e passar o parâmetro ? Isto você pode configurar na janela de propriedades do projeto em Project/Properties/Debug:

image 

Se você precisar testar mais de um parâmetro ao mesmo tempo, basta colocá-los separados por espaços, do mesmo modo que faria no prompt de comandos. Agora para finalizar, vou mostrar como passar o parâmetro para o form principal da aplicação. Para isto teremos que modificar o construtor do form, veja:

   1: public partial class frmPrincipal : Form

   2:     {

   3:         public frmPrincipal(string[] parametros)

   4:         {

   5:             InitializeComponent();

   6:         }

   7:     }


Na verdade acrescentamos o parâmetro no construtor do form, mas se você precisar passar qualquer outra informação, basta modificar o construtor. Agora vamos voltar no program.cs e passar o parâmetro:

   1: Application.Run(new frmPrincipal(parametros));


É isto aí pessoal, um abraço e até a próxima.

Carlos dos Santos

Ferramentas para Relatórios

Para quem está desenvolvendo aplicações comerciais em .Net, uma dúvida muito comum é como criar os relatórios da aplicação. Se você usa o Microsoft SQL Server, poderá usar o Reporting Services (), que é um excelente ferramenta para relatórios.

Mas se você usa outros bancos de dados, ou está criando uma aplicação multi-banco, talvez o Reporting Services não seja uma boa opção, mas não se preocupe pois existem várias alternativas e excelentes ferramentas para relatórios, vejamos algumas delas que considero muito boas:

1. PrintDocument: componente do Visual Studio onde você precisará desenhar o relatório manualmente, não é a maneira mais eficaz para um relatório, mas pode ser útil em alguns casos. Conheça mais em:

2. SQL Reporting Services: faz parte do Microsoft SQL Server e é uma ferramenta gratuita, mesmo nas versões Express. É simples de utilizar e possui grande variedade de templates. Os relatórios ficam armazenados dentro do SQL Server. Conheça mais em: http://msdn.microsoft.com/pt-br/library/ms159106.aspx

3. DevExpress XTraReports: é uma ferramenta realmente excelente, apesar de ser paga, não é muito cara e depois de instalar o componente você terá um novo template para um item de projeto do tipo XTraReport, onde você cria relatórios realmente fantásticos. Você tem total controle sobre todas as partes do relatório e pode escrever o código em C# ou VB.Net dentro do Visual Studio. Os relatórios são compilados junto com a aplicação e você precisa somente distribuir as DLLs do componente. Um ponto que não gosto muito é que não tem um Designer muito amigável para o usuário final, caso você queira permitir que seus usuários modifiquem os relatórios. Ele também expota os relatórios para um dezena de formatos, como PDF, JPG, Word, Excel, HTML, etc. Conheça mais em: http://www.devexpress.com/products/net/reporting/
A DevExpress é muito conhecida também pela sua suite de componentes, que vale a pena você conhecer.

image

4. StimulReport: é uma ferramente excelente e muito simples de utilizar, trabalha por padrão com Ribons no Designer o que facilita muito a vida do desenvolvedor, permite controlar totalmente o relatório, assim como o XTraReports, mas ao contrário deste, o relatório não é compilado junto com a aplicação, ficando em um arquivo separado. Neste caso ou você mantém o arquivo separado ou cria um mecanismo para armazená-lo no banco de dados. A grande vantagem desta ferramenta é a facilidade de se modificar um relatório em tempo de execução, simplesmente clicando em um botão EDIT. Ele permite também que os formulários para os filtros do relatório, por exemplo, sejam feitos juntamente com o relatório, o que facilita muito a nossa vida. Você precisará também enviar junto com a aplicação as DLLs do componente. AO Stimul tem também uma interface toda em WPF, o que lhe confere um visual bem mais moderno. Ele também expota os relatórios para um dezena de formatos, como PDF, JPG, Word, Excel, HTML, etc. Conheça mais em: http://www.stimulsoft.com/

image

É claro que existem vários outros componentes para relatórios, mas estes são os que eu considero muito produtivos. É isto aí, acho que deu para ter uma idéia de que caminho tomar no desenvolvimento de relatórios para aplicações.

[]s,
Carlos dos Santos.