Prueba con esta función:
Código Delphi
[-]function TOneInstance.IsRunning: Boolean;
const
SSubClass = '.OneInstance.';
var
Mutex: THandle;
Flag: DWORD;
begin
Result := False;
if csDesigning in ComponentState then Exit;
Result := True;
Mutex := CreateMutex(nil, True,
PChar(Application.Title + SSubClass + 'CriticalSection'));
if (GetLastError <> 0) or (Mutex = 0) then Exit;
_OneInstanceMutex := CreateMutex(nil, False,
PChar(Application.Title + SSubClass + 'Default'));
Flag := WaitForSingleObject(_OneInstanceMutex, 0);
Result := (Flag = WAIT_TIMEOUT);
ReleaseMutex(Mutex);
CloseHandle(Mutex);
end;
Llámala en el evento OnCreate del MainForm de tu aplicación, detectará si ya hay ejecutándose otra aplicación con el mismo título y te devolverá ese valor.
Suerte.