Ver Mensaje Individual
  #7  
Antiguo 23-04-2008
alquimista alquimista is offline
Miembro
 
Registrado: ene 2008
Posts: 203
Reputación: 17
alquimista Va por buen camino
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.
Responder Con Cita