En mi mata programas utilizo la siguiente rutina, sacada de internet y modificada algo:
POr supuesto no es perfecta pero mata los programas
Código Delphi
[-]function KillTask(ExeFileName: string): Integer;
var
foto: Cardinal;
datos: tagPROCESSENTRY32;
p: array[0..512] of char;
function QuitarSaltosLinea(Strs: String; CharReplace:String=#0):String;
var
Str:string;
begin
Str := AnsiReplaceStr(Strs, #$D, CharReplace);
Result := AnsiReplaceStr(Str, #$A, CharReplace);
end;
begin
Result:=0;
ExeFileName:=QuitarSaltosLinea(ExeFileName);
strpcopy(p,ExeFileName);
datos.dwSize := sizeOF(tagPROCESSENTRY32);
foto := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
while Process32Next(foto, datos) do
begin
if (UpperCase(datos.szExeFile) = UpperCase(p)) then
begin
Result := Integer(TerminateProcess(
OpenProcess(
PROCESS_TERMINATE,
BOOL(1), datos.th32ProcessID), 0));
end;
end;
CloseHandle(foto);
end;
para el WinXp o NT uses tlhelp32;
Si alguno de los programas se resiste se puede usar esto para ayudar:
Código Delphi
[-]function EnablePrivilege(PrivilegeName: PChar; Enable: Boolean): Boolean;
var
hToken: THandle;
Tp: TOKEN_PRIVILEGES;
Luid: TLargeInteger;
begin
Result:= FALSE;
if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or
TOKEN_QUERY or TOKEN_READ or TOKEN_WRITE or TOKEN_ALL_ACCESS, hToken) then
if LookupPrivilegeValue(nil,PrivilegeName,Luid) then
begin
Tp.PrivilegeCount:= 1;
Tp.Privileges[0].Luid:= Luid;
if Enable then
Tp.Privileges[0].Attributes:= SE_PRIVILEGE_ENABLED
else
Tp.Privileges[0].Attributes:= 0;
Result:= AdjustTokenPrivileges(hToken,FALSE,Tp,0,nil,PDWORD(nil)^);
CloseHandle(hToken);
end;
end;
Código Delphi
[-]EnablePrivilege('SeDebugPrivilege', TRUE);
No se exactamente que es lo que hace pero creo que me sirvio
Ya me cuentas.