Mep Sites - Dicas

Mep Sites: Dicas de Delphi - Permite apenas uma instância da aplicação aberta

Como evitar que um programa seja executado mais de uma vez.

Muitos programas Windows permitem apenas uma cópia em execução de cada vez. Isto é interessante principalmente quando é um grande aplicativo, pois duas cópias ao mesmo tempo usaria muito mais memória. Em aplicativos desenvolvidos em Delphi podemos ter esta característica.
Vejamos:

- Crie um novo projeto;
- Mude o "Name" do Form1 para ADFormPrinc;
- Altere o código-fonte do arquivo Project1.dpr
conforme abaixo:

uses
Forms, Windows,
Unit1 in 'Unit1.pas' {ADFormPrinc};

{$R *.RES}

var
Handle: THandle;
begin
Handle := FindWindow('TADFormPrinc', nil);
if Handle <> 0 then begin { Já está aberto }
Application.MessageBox('Este programa já está aberto. A cópia ' +
'anterior será ativada.', 'Programa já aberto', MB_OK);
if not IsWindowVisible(Handle) then
ShowWindow(Handle, SW_RESTORE);
SetForegroundWindow(Handle);
Exit;
end;
Application.Initialize;
Application.CreateForm(TADFormPrinc, ADFormPrinc);
Application.Run;
end.

Observações
Para testar este programa você deverá compilar o projeto e fechar o Delphi. Tente executá-lo mais de uma vez e veja o que acontece. Mas porque alterar o name do form principal para "ADFormPrinc"? Este poderia ser qualquer outro nome, mas preferi usar as iniciais do site (AD - ActiveDelphi). Isso para não correr o risco de colocar um nome que possa ser encontrado em outro aplicativo do Windows. Por exemplo: se deixar Form1, será bem fácil encontrar outro aplicativo feito em Delphi que possua uma janela com este nome, o que causaria problema.

Fonte: Active Delphi