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
[-]
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;
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;
procedure TFrmPrincipal.Terminar();
begin
try
KillTask (soloExe(Application.ExeName));
except on exception do end;
end;