Pesquise no Blog

 

terça-feira, 26 de fevereiro de 2008

Evitar múltiplas instâncias do Programa

O tratamento de múltiplas instâncias do executável é uma praticamuito útil, principalmente quando não queremos que os usuários trabalhem com mais de uma instância de nossas aplicações.

Ja vi muitas gambiarras bizzarras e pouco elegantes para resolver esse problema, neste tutorial vou mostrar uma maneira simples e elegante pare resolver de uma vez por todas esse prblema:

Declare a variável global
var
{...} HMutex: THandle; //Essa variável deve ser GLOBAL


No onCreate do seu form digite o seguinte código
Var
{...} FileName : PChar;
begin
{...}FileName := PChar( ExtractFilePath( Application.Exename ) );
{...} HMutex := createMutex(nil, True, FileName);

{...}if ( HMutex = 0 ) or ( GetLastError = ERROR_ALREADY_EXISTS ) then
{...}{...}raise Exception.Create('O programa já está em execução.');

(* Restante da sua lógica.... *)
end;


No on close

ReleaseMutex( HMutex );

Pronto.

Para saber mais: Exclusão Mútua ( Mutex )
: Win32 Error codes