Artigos de Setembro dAmerica/New_York 2011
Não permitir execução de mais de uma instância em Delphi
Uma forma simples de não permitir que o usuário abra mais de uma instância do programa é usar o objeto de sincronização (mutex) para criar um identificador para seu processo, e verificá-lo na inicialização do aplicativo.
No source da aplicação usa-se:
uses windows var mAppMutexHnd: cardinal; const APPLICATION_MUTEX_ID = 'AplicativoMutex'; begin Application.Initialize; // Cria o mutex para verificação mAppMutexHnd := CreateMutex(nil, BOOL(1), APPLICATION_MUTEX_ID); // Checa se a aplicação já está rodando if (mAppMutexHnd = 0) or (GetLastError <> 0) then begin MessageBox(0, 'Programa já em execução.', 'Aviso', MB_ICONHAND); Application.Terminate; end; try Application.Run; finally // Fecha a instância criada CloseHandle(mAppMutexHnd); end; Application.Terminate;
