Ver Mensaje Individual
  #1  
Antiguo 08-06-2006
zurech zurech is offline
Miembro
 
Registrado: jul 2005
Posts: 61
Reputación: 19
zurech Va por buen camino
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;
Responder Con Cita