Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-04-2008
vejerf vejerf is offline
Miembro
 
Registrado: ene 2007
Posts: 206
Poder: 18
vejerf Va por buen camino
Enviar mensaje a otra aplicación

Buenas,
El problema es el siguiente. En mi aplicación hago uso de otra aplicación y cuando yo quiero cerrar la mía, quiero q la otra también se cierre. Aquí tengo dos alternativas con las que no consigo el efecto que yo deseo:
- Matar el proceso. A priori si mato el proceso no debería tener problemas, pero no es así. No lo mato bien muerto y se queda como en segundo plano ejecutándose de forma errónea. El por qué no lo sé, pero es lo q sucede.
- La segunda forma sería enviando un mensaje pidiendo q se cierre SendMessageAplicacion.Hwnd,WM_CLOSE,0,0). Lo que ocurre es q en este caso la aplicación me muestra un mensaje diciendo si deseo cerrar con las opciones de Sí, No, Cancelar.
Ante esta situación me estoy decantando por la segunda forma, pero me gustaría saber si hay alguna manera desde mi aplicación Delphi de enviarle un segundo mensaje para decirle elijo la opción 'Sí'.

Gracias a todos y perdón por el chorizo de mensaje...
Responder Con Cita
  #2  
Antiguo 24-04-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
a ver... prueba matando la ejecución del exe y me cuentas

Código Delphi [-]
....
uses TLHelp32; //agregar
....
 
procedure TForm1.Button1Click(Sender: TObject);
 function KillTask(FileName:String):integer;
 var
     ContinueLoop:BOOL;
     FSnapshotHandle:THandle;
     FProcessEntry32:TProcessEntry32;
 const
     PROCESS_TERMINATE=$0001;
 begin
     FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
     FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);
     ContinueLoop:=Process32First(FSnapshotHandle,FProcessEntry32);
     while integer(ContinueLoop)<>0 do
     begin
         if
 ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile))=UpperCase(FileName))
             or (UpperCase(FProcessEntry32.szExeFile)=UpperCase(FileName)))
 then
 Result:=Integer(TerminateProcess(OpenProcess(PROCESS_TERMINATE,BOOL(0),
                                     FProcessEntry32.th32ProcessID),0));
           ContinueLoop:=Process32Next(FSnapshotHandle,FProcessEntry32);
     end;
     CloseHandle(FSnapshotHandle);
 end;

 begin
   KillTask('Notepad.exe');
 end;

Fuente: Q3Team

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #3  
Antiguo 24-04-2008
luiggixD luiggixD is offline
Miembro
 
Registrado: dic 2006
Ubicación: Lima - Peru
Posts: 32
Poder: 0
luiggixD Va por buen camino
X q no pruebas emplear algun componente de conexion entre programas?? como TcpServer y TcpClient, y solo lo empleas para enviar la informacion al final. Envias un mensaje desde el cliente al servidor para q le digas q debe cerrarse, y al recibir esa señal entonces el otro programa se cierra. Quizas consuma un poco mas de recursos pero es una opcion, como te digo. Espero que te ayude
Responder Con Cita
  #4  
Antiguo 24-04-2008
vejerf vejerf is offline
Miembro
 
Registrado: ene 2007
Posts: 206
Poder: 18
vejerf Va por buen camino
Gracias a los dos por responder MaMu y luigixD.

Al final he probado lo que me decía MaMu y por fin mato bien muerto a la aplicación (Google Earth en concreto). Antes había probado esa solución, pero sin acierto, ya que en vez de pasarle a la función KillTask(FileName : String) el nombre del ejecutable le pasaba el nombre de la ventana. Es decir, en vez de pasar como argumento 'googleearth.exe' le pasaba 'QWidget' y entonces obtenía un efecto raro y es q no lo mataba.

En cuanto a tu solución luigixD la descarté porque, aparte que lo otro me ha funcionado bien, no podía usarla ya que la otra aplicación (Google Earth) no era mía jeje.

En fin que muchas gracias a los dos... que con este simple gesto me habeis arrancado la primera sonrisa del día ... Que muchas gracias!!!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Enviar caracteres o pulsaciones de teclas a otra aplicación no Delphi Faust API de Windows 9 28-12-2021 11:43:43
Se podrá Enviar un mensaje SMS a una Aplicación en Delphi???? AGAG4 Internet 19 14-03-2013 04:06:18
Enviar un click a otra aplicacion. Sergiov API de Windows 2 11-04-2007 14:23:29
enviar un mensaje a un celular desde una aplicacion delphi chabelo07 Internet 1 29-11-2006 21:17:23
Enviar mensaje Ignacio Varios 6 05-03-2004 09:38:07


La franja horaria es GMT +2. Ahora son las 18:59:14.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi