PDA

Ver la Versión Completa : lanzar proceso lanzado desde aplicacion delphi


agustincs
28-08-2004, 03:41:41
tengo una aplicacion hecha en delphi desde la que lanza un programa y luego dejo a la aplicacion delphi esperando a que termine de la siguietne forma:
Process := ExecuteProcess('programab.exe');
if Process <> 0 then
WaitForSingleObject(Process, INFINITE);
Application.Restore;


Asi pues, es fundamental que mientras esta esa aplicacion en ejucion, mi programa "lanzador" siga en memoria. Por tanto, si el usuario cierra el programa que lanzador desde el gestor de procesos, quiero que mi lanzador, antes de morir, fuerce el cierre del ejecutable que habia lanzado. Supongo que eso lo tendre que hacer desde el evento onclose del form, pero no se exactamente como hacerlo, se que es mas facil al lanzar la otra aplicacion desde mi aplicacion ya que lo puedo cerrar por el puntero, pero tampoco se como ni donde guardar ese puntero a la aplicacion lanzada, :confused:

roman
28-08-2004, 04:05:13
¡Por Zeus! ¡Qué paranoia! ¿Acaso tus usuarios son hackers? :D

Mira, la verdad la tienes difícil. Cuando se mata un proceso mediante el gestor de procesos no se ejecutará ninguna rutina de salida de tu aplicación.

Puedes verlo tu mismo haciendo algo en el OnClose y matando el proceso.

// Saludos

agustincs
28-08-2004, 04:38:36
jeje. pues no es que sean hackers, pero poco les falta, creeme :D

no hay ninguna forma.. vaya.. eso si que me fastidia bien.. era imprescindible para el buen funcionamiento, xd

roman
28-08-2004, 04:48:47
no hay ninguna forma.. vaya.. eso si que me fastidia bien

¡Hombre! No tomes mis palabras tan literal. Que yo piense que no se puede no significa necesariamente que así sea. ;)

De cualquier forma, hay formas de deshabilitar el usos del gestor de procesos mediante políticas de grupo de Windows.

// Saludos

agustincs
28-08-2004, 05:02:45
si, eso lo se... pero la aplicacion esta es para que la isntales varias personas que estan en diversos puntos de españa, por tanto no puedo ir pc por pc cambiando eso... y desconozco totlamente como lo puedo cambiar atraves de mi aplicacion

moesis
28-08-2004, 20:42:32
Saludos,

Quizás lo que vaya a decir es una estupidez, pero ... siempre hay que ver el otro lado de la moneda ;).

Por tanto, si el usuario cierra el programa que lanzador desde el gestor de procesos, quiero que mi lanzador, antes de morir, fuerce el cierre del ejecutable que habia lanzado
Claro que si el programa no aparece en el 'Process Manager' ¿Como lo mataría el usuario? Bueno se puede, pero no creo que tus 'hackers' lleguen tan lejos, pues habría que identificar el process_id mediante el nombre de la ventana, y después enviarle un KILL_PROCESS desde un programa que se encuentre en el anillo 0 del sistema operativo... cosa poco probable (fijate que digo probable) ;)


Espero que te ayude la idea.
Un saludo,

agustincs
28-08-2004, 21:30:45
vaya, esa solucion ya me gusta muchsismo mas :D

como tendria que hacer para que cada vez que el lanzador lanza la aplicacion, que el lanzador desaparezca de la barra de aplicaciones y tampoco se vea en el gestor de procesos? si me dices como hacer eso me salvas la vida :p

moesis
29-08-2004, 00:44:57
Saludos agustincs

Este código lo he sacado de http://www.q3.nu/trucomania/ una página interesante que no convendría olvidar para determinadas cosas.


procedure TfrmMain.btnHideFromTaskBarClick (Sender:TObject);
begin
ShowWindow (Application.Handle, SW_HIDE);
SetWindowLong (Application.Handle, GWL_EXSTYLE,
GetWindowLong (Application.Handle, GWL_EXSTYLE) or
WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
ShowWindowLong (Application.Handle, SW_SHOW);


No obstante puedes mirar también en este otro enlace (http://www.experts-exchange.com/Programming/Programming_Languages/Delphi/Q_11886178.html) aunque este está en inglés, puede servirte pues incluso muestra una clase para realizar tal tarea.

Espero haberte ayudado.
Saludos.

agustincs
29-08-2004, 11:41:36
acabo de probar eso en XP pero no funciona :-S
me tira error en concreto la ultima linea, ShowWindowLong
Me podrias decir de que truco lo quitaste? es que estube buscando en la web y no encontre ese truco :(

DarkByte
01-09-2004, 20:20:11
Buscad en clubdelphi que está...

agustincs
01-09-2004, 21:24:52
pos yo no lo vi, lo veo mucho para windows 98/me, pero para windows xp/2000 nunca lo vi