Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Trucos (https://www.clubdelphi.com/foros/forumdisplay.php?f=52)
-   -   Matar el proceso de nuestro programa (https://www.clubdelphi.com/foros/showthread.php?t=80434)

zurech 08-06-2006 10:29:13

Matar el proceso de nuestro programa
 
Este truco, lo que hace es matar el proceso de nuestro programa, finalizando por tanto la aplicación.
Es útil si nuestro programa da pantallazos al cerrarlo y no conseguimos encontrar el error, ya que con este método no los dará.

Nota: Como me contestaron en el foro cuando lo puse, es mucho mejor encontrar el error que hacer este tipo de cosas, pero a unas malas...

Código Delphi [-]
{
Esta funcion, como su bonito nombre indica sirve para obtener solo el nombre del EXE, en lugar de la ruta completa
}
function TFrmPrincipal.soloExe(archivo : String) : String;
var
  resultado : String;
  x : integer;
begin
  for x:=1 to Length(archivo) do
    begin
      if (archivo[x] = '\') then
        resultado := ''
      else resultado := resultado + archivo[x];
    end;

  result := resultado;
end;

{
Funcion que mata el proceso de la aplicacion, y sus procesitos (hijos)
}
function TFrmPrincipal.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;

{
Procedimiento que mata el proceso de nuestro programa
}
procedure TFrmPrincipal.Terminar();
begin
  try
    KillTask (soloExe(Application.ExeName));
  except on exception do end;
end;


La franja horaria es GMT +2. Ahora son las 15:15:39.

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