![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Hola Foro! tiempo sin verlos, creo que si podrias iniciar la aplicacion clon de la actual antes de cerrarla, pues puedes comunicarlas con paso de mensajes a través del RegisterWindowMessage, solo tendrias q parar el arranque de la secundaria desde código hasta q la primera le comunique q ya ha terminado (en otras palabras: la primera espera el momento en que la segunda tenga conciencia para terminar), por ejemplo esta aplicación evita ser ejecutada si ya existe otra instancia de ella:
UINT gmShutDown; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { gmShutDown=RegisterWindowMessage("6FBFC81A-D32A-4B8D-BB60-0390470F82CF"); } //--------------------------------------------------------------------------- void __fastcall TForm1::ApplicationEvents1Message(tagMSG &Msg,bool &Handled) { if(Msg.message == gmShutDown) //Recepción del mensaje de primera aplicación Application->Terminate(); } //--------------------------------------------------------------------------- void __fastcall TForm1::BitBtn1Click(TObject *Sender) { PostMessage(HWND_BROADCAST, gmShutDown, 0, 0); //Enviar el mensaje a las otras //aplicaciones } Ojala te sirva!!! |
#2
|
|||
|
|||
Buenas otra vez, en primer lugar gracias a todos. Veo q aqui hay autenticos expertos en Delphi
![]() Dec el problema q te comentaba viene dado pq yo al intentar iniciar la aplicacion, tengo un control para q no se pueda hacer dos veces, al probarlo ya salta ese aviso y no se ejecuta el programa ya que al llamarlo el primero q se ejecuto aun no ha acabado. Esto seria sencillo de controlar metiendo una variable q distinga ese caso de otro, pero este programa es bastante gordo (consume mucha memoria, tira de una BD de SQL Server muy muy grande, cxargha muchisimas cosas al arrancar...) y por ello no es factible arrancarlo por segunda vez si ya esta en ejecucion. En una maquina actual no daria problemas pero...en un PII o un PIII si no lo peta iria lentisimo. No obstante gracias a todos por las respuestas, seguire investigando y probando lo q me habeis dicho y a ver si llego a alguna solucion. Un saludo. |
![]() |
|
|
![]() |
|