Estaba buscando información sobre otra cosa y he ido a dar con este hilo. Aunque es ya de hace unos meses os pongo aquí como lo resuelvo yo en BCB.
En el fichero que lanza la aplicación (el .cpp asociado a su homónimo .bpr):
Código:
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
HWND OtraVentana;
AnsiString cVersion = "Mi aplicación";
OtraVentana = FindWindow(NULL, cVersion.c_str());
if (OtraVentana != NULL)
{
Application->MessageBox("¡¡¡LA APLICACIÓN YA ESTÁ ACTIVA!!!", cVersion.c_str(), 48);
ShowWindow(OtraVentana, SW_RESTORE);
SetForegroundWindow(OtraVentana);
return 0;
}
try
{
Application->Initialize();
Application->Title = cVersion;
Application->CreateForm(__classid(TfPersona), &fPersona);
Application->Run();
}
catch(Exception &exception)
{
Application->ShowException(&exception);
}
catch(...)
{
try
{
throw Exception("");
}
catch(Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}
//---------------------------------------------------------------------------
Me parece un método sencillo y elegante.