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;
    Postado em 29/09/2011