Te muestro como resolví ese problema en C (Builder):
Código:
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
char AppName[] = "MI_Aplicacion";
Application->Title = "XXMI_AplicacionXX";
HWND W = ::FindWindow("TApplication", AppName);
HWND H = ::FindWindow("TApplication", Application->Title.c_str());
Application->Title = AppName;
if(W){
ShowWindow(W, SW_RESTORE);
SetForegroundWindow(W);
Application->Terminate();
return 0;
}
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}
//---------------------------------------------------------------------------
Si se intenta volver a ejecutar lo que hace es mostrar la ventana de la aplicación que ya estaba abierta cerrando la nueva que se está creando. Nunca me dio problemas para maximizar desde la barra de tareas.
Saludos.